gpt4 book ai didi

Java 8 Stream 在列表中查找元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:47 25 4
gpt4 key购买 nike

我有以下类(class):

public class Item {
int id;
String name;
// few other fields, contructor, getters and setters
}

我有一个项目列表。我想遍历列表并找到具有特定 ID 的实例。我正在尝试通过流来做到这一点。

public void foobar() {

List<Item> items = getItemList();
List<Integer> ids = getIdsToLookup();
int id, i = ids.size() - 1;

while (i >= 0) {
id = ids.get(i);
Optional<Item> item = items
.stream()
.filter(a -> a.getId() == id)
.findFirst();
// do stuff
i--;
}
}

这是遍历列表并获取我需要的元素的最佳方式吗?此外,我在 id 的过滤器行上收到一条错误消息,指出 lambda 表达式中使用的变量必须是最终变量或实际上是最终变量。也许我可以在 while 循环中定义 id,这样应该可以消除异常。谢谢。

最佳答案

你可以尝试使用这样的东西:

ids.forEach(id -> 
list.stream()
.filter(p -> p.getId() == id)
.findFirst()
.ifPresent(p -> {
// do stuff here
});
);

Optional 这里表明你的过滤器方法可以返回一个空流,所以如果你调用 findFirst 它可以找到一个或零个元素。

关于Java 8 Stream 在列表中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928747/

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