Jon*_*rin 0 java java-8 java-stream
是否可以使用 Streams 过滤器访问列表的索引?我的意思是...我知道可以使用循环(while、for 等)来做到这一点,但就好像列表在变成流时会丢失有关索引的信息。
我想是这样的:
list.stream().filter(x -> x > 100)
    .fiter(--getIndexOfEachValue--)
    .collect(Collectors.toList())
如果我有 List=[10,200,30,150,400,30]...
我期望结果=[1,3,4]
不,这是不可能的。该stream()调用会生成值流。由于列表中的值不是唯一的,因此不可能将它们映射到原始列表中的唯一位置。  
您可以将示例编码为:
list.stream().filter(x -> x > 100)
    .map(x -> list.indexOf(x))
    .collect(Collectors.toList())
但请记住:
O(N^2)算法,并且list不唯一,您将得到意想不到的结果。另一种方法是创建列表下标流。或者简单地迭代列表。这是前者的一个例子:
IntStream.range(0, list.size())
     .filter(i -> list.get(i) > 100)
     .boxed()
     .collect(Collectors.toList());
请注意,我们正在流式传输列表的索引而不是列表元素。如果列表元素不唯一,它将起作用。
| 归档时间: | 
 | 
| 查看次数: | 1575 次 | 
| 最近记录: |