Par*_*agJ 9 java lambda java-stream
我想实现以下使用流:
List<MyObject> list1 = Arrays.asList(obj1, obj2, obj3);
List<Boolean> list2 = Arrays.asList(true, false, true);
List<MyObject> list = new ArrayList<>();
for(int i=0; i<list1.size();i++) {
if(list2.get(i))
list.add(list1.get(i));
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?它应该很简单,但我是java流的新手.
注意: list1和list2的长度始终相同.
use*_*037 12
你可以这样做:
List<MyObject> list = IntStream.range(0, list1.size())
.filter(i->list2.get(i))
.map(i->list1.get(i))
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
如果Java有内置zip流可能会更好 .例如,使用Guava,您可以使用:
Streams.zip(list2.stream(), list1.stream(), (a,b) -> a ? b : null)
.filter(Objects::nonNull)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13972 次 |
| 最近记录: |