gpt4 book ai didi

java - 是否可以使用 Java 8 Streams 过滤器访问列表的索引?

转载 作者:行者123 更新时间:2023-12-01 19:29:07 24 4
gpt4 key购买 nike

是否可以使用 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());

请注意,我们正在流式传输列表的索引而不是列表元素。如果列表元素不唯一,它将起作用。

关于java - 是否可以使用 Java 8 Streams 过滤器访问列表的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60359250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com