想要在下面的代码段中使用Streams API并删除当前for循环:
public List<MyObject> performSomeAction(){
List<String> myList= Arrays.asList("abc","xyz","def");
List<MyObject> resultList=new ArrayList<MyObject>();
int startIndex=0;
int totalNumOfRecords=1000;
for(int i=0;i<totalNumOfRecords;i++){
SomeObject o= xService.doSomething();
String type = o.getType();
int length = o.getLength();
if(myList.contains(type)){
int[] myarray=getMyArray(startIndex+20, startIndex+length);
String id=o.getSomeId();
OtherObject obj= xService.performOperation(myarray,"abcd");
resultList.add(new MyObject(obj,id));
}
startIndex+=length;
}
return resultList;
}
Run Code Online (Sandbox Code Playgroud)
我试过这样的事情:
IntStream.range(0,totalNumOfRecords).forEach(i -> xService.doSomething());
Run Code Online (Sandbox Code Playgroud)
但我陷入困境,没有得到进一步的进展,需要从派生对象'o'中取出多个值,并使用它在它上面执行过滤器再次使另一个方法调用得到一些数组,将其传递给其他方法返回我需要创建resultList的其他对象
我需要计算Stream中的Elements并将其分配给Integer而不进行强制转换.
.count() 回来很久
想到了.collect(Collectors.reducing(..))但不能弄明白.我觉得有一些简单的事我没有得到.
我的尝试:
Stream<String> s = Stream.of("Hallo ", "Test", "String");
Integer count = s.filter(e -> (e.length() >= lb && e.length() <= ub && !e.contains(" ")))
.map(e -> e.toUpperCase())
.distinct()
.collect(Collectors.reducing(0, e -> 1, Integer::sum)));
System.out.println(count);
Run Code Online (Sandbox Code Playgroud) 我需要使用lambda表达式迭代HashMap的HashMap并过滤掉一些不需要的条目.我尝试了一些方法,但似乎没有用.以下是地图的结构.
Map<String, Map<Date, String>> sensor_tags = new HashMap<String, Map<Date,String>>();
Run Code Online (Sandbox Code Playgroud)
从这张地图中,我需要删除传感器数据早于特定日期的条目(日期是内部地图的关键).以下是地图sensor_tags-的示例数据
String tagName = "zoneSensor";
Map<Date, String> values= new HashMap<Date, String>();
// (1st entry for tag 1) --> date is day before yesterday
Calendar datekey1 = Calendar.getInstance();
datekey1.set(2018, 12, 01, 12, 30, 45);
values.put(datekey1.getTime(), "ON");
// (2nd entry for tag 1) --> date is yesterdys date
Calendar datekey = Calendar.getInstance();
datekey.set(2018, 12, 02, 12, 30, 45);
values.put(datekey.getTime(), "OFF");
// (3rd entry for tag 1) --> date is today
Calendar instance = …Run Code Online (Sandbox Code Playgroud) 我怎样才能将它转换为java 1.6?方法.stream()在java 1.6中无法使用.
final Optional<Entry<String, String>> mapping = cfg.getTypeMapping()
.entrySet()
.stream()
.filter(e -> e.getKey().startsWith(jsonType + "|"))
.findFirst();
Run Code Online (Sandbox Code Playgroud) 如何在Java 8中转换Stream<Character>成A String?Collectors.joining()期望CharSequence因此它给编译错误。
我有NavigableMap以下格式:
NavigableMap <Long, String> mymap = new ConcurrentSkipListMap <Long, String> ();
//.......some operations
NavigableMap <Long, String> newmap;
//clone mymap into newmap;
Run Code Online (Sandbox Code Playgroud)
如何将内容深层复制/克隆mymap到newmap?Java 8应该可以正常使用.
我想将转换List<String>为IntStream。假设我的清单是["abc", "de", "fghi"]。然后IntStream,我要像1,1,1,2,2,3,3,3,3。(一些出现的次数i在IntStream取决于长度i个串中的给定的列表)
为此,我编写了以下方法(它将不会编译):
private static IntStream getSingleIntStream(List<String> list) {
final AtomicInteger atomicInteger = new AtomicInteger();
return list.stream()
.map(str -> {
atomicInteger.incrementAndGet();
return IntStream.range(0, str.length())
.map(i -> atomicInteger.get());
}); // Now I don't understand how can I convert this Stream<IntStream> to a single IntStream
}
Run Code Online (Sandbox Code Playgroud)
但是我不明白如何将a转换Stream<IntStream>为单个IntStream。(我的猜测是我们可以flatMap以某种方式使用,但我不完全了解如何使用它。)
我使用IntStream而不是Stream<Integer>避免自动装箱,并使我的整个系统更高效。
我有一个地图列表,其中每个地图只有one key-value pair一个。我需要将其转换为仅键列表。我正在尝试使用流,如下所示:
List<Map<Long, String>> lst = // some data
List<Long> successList = lst.stream().map(ele -> ele.keySet().toArray()[0]).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是我最终收到以下错误:
java: incompatible types: inference variable T has incompatible bounds
equality constraints: java.lang.Long
lower bounds: java.lang.Object
Run Code Online (Sandbox Code Playgroud)
如何解决此问题,或者有什么更好的方法?
我正在尝试在JSP中将列表的内容打印为单个字符串,并用逗号分隔。
<div>${myList.stream().map(e->e.getStringValue()).collect(Collectors.joining(", "))}</div>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
javax.el.MethodNotFoundException: Method not found: class org.apache.el.stream.Stream.collect(null)
Run Code Online (Sandbox Code Playgroud)
为什么Tomcat使用它自己的版本Stream?有没有一种方法可以避免这种情况,并确保当我将它们放在JSP的EL中时,我在java类中编写的内容具有相同的行为?
我找到了这个答案/sf/answers/3005143991/ 但这不能解决我的问题。它使用Tomcat Streams的自定义方法。
假设我有一个对象列表,可称其为具有数量和价格作为字段的对象Order。
例如如下:
对象Order(字段quantity和price)列表包含以下值:
Quantity Price
5 200
6 100
3 200
1 300
Run Code Online (Sandbox Code Playgroud)
现在,我想使用Java-8来获取以以下方式过滤的列表:
Quantity Price
8 200
6 100
1 300
Run Code Online (Sandbox Code Playgroud)
价格是要过滤的唯一值,并对价格具有的任何数量进行求和,我想以此为基础形成一个新列表。
请建议我如何使用Java 8 Lambda表达式来完成此操作,谢谢。