使用Java流从嵌套列表中查找数据
我需要从嵌套的使用Java流从嵌套列表中查找数据,java,for-loop,java-8,java-stream,nested-lists,Java,For Loop,Java 8,Java Stream,Nested Lists,我需要从嵌套的列表中找到一些对象 我相信类代码是不需要的,因为过滤是在嵌套的中为每个循环公开的 int value = someValue; MyObject found = null; for (List<MyObject> list : nestedList) { for (MyObject myObject : list) { if (myObject.isType() && myObject.getValue() == value) {
列表中找到一些对象
我相信类代码是不需要的,因为过滤是在嵌套的中为每个循环公开的
int value = someValue;
MyObject found = null;
for (List<MyObject> list : nestedList) {
for (MyObject myObject : list) {
if (myObject.isType() && myObject.getValue() == value) {
found = myObject;
}
}
}
如何使用流替换代码中每个循环的
第二个循环的解决方案for
listMyObject = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == value)
.collect(Collectors.toList());
您可以将findAny
用作:
MyObject found = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == someValue)
.findAny()
.orElse(null);
尽管您的实际代码确保选择最后找到的对象,因为每次满足条件时您都会覆盖该对象。这有助于第二次循环
List<List<Integer>> inner=Arrays.asList(Arrays.asList(1,2,3),Arrays.asList(4,2,6));
List<Integer> optinner= inner.stream().flatMap(List::stream).filter(integer ->
integer==2).collect(Collectors.toList());
List-inner=Arrays.asList(Arrays.asList(1,2,3),Arrays.asList(4,2,6));
List optinner=internal.stream().flatMap(List::stream).filter(整数->
整数==2.collect(Collectors.toList());
感谢对flatMap
的良好使用,可以将其用于我的第二个嵌套for
?@QA\u ColflatMap
与流一起将嵌套列表缩减为一个对象流。如果确实需要查找最后一个,只需将findAny()
替换为reduce((a,b)->b)
可以。尽管这很少需要。
MyObject found = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == someValue)
.findAny()
.orElse(null);
List<List<Integer>> inner=Arrays.asList(Arrays.asList(1,2,3),Arrays.asList(4,2,6));
List<Integer> optinner= inner.stream().flatMap(List::stream).filter(integer ->
integer==2).collect(Collectors.toList());