gpt4 book ai didi

java-8 - Java 8 列表操作

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

我正在尝试对 ListChangeListener.onChanged(Change<? extends Place>) 中的列表执行一些基本的映射/过滤操作方法,我可以使用老式的“迭代并做一些 ifs”方式让它工作,但我想尝试使用 stream() 来编写它来自 Java 8 的方法。注释部分没有给出相同的结果,它无法正确过滤掉类别(是的,我有一个 equals(Object) 的工作实现 Category

for (Place p : change.getAddedSubList()) {
if (!categories.contains(p.getCategory())) {
categories.add(p.getCategory());
}
}
// List<Category> addedCategories = change.getAddedSubList().stream()
//                      .map(Place::getCategory)
//                      .filter((c) -> { return !categories.contains(c); })
//   .collect(Collectors.toList());
// categories.addAll(addedCategories);

最佳答案

那是因为在第一个版本中,一旦您将类别添加到列表中,此类别的后续出现将不会被第二次添加:您已经将其添加到列表中。第二个版本不做同样的事情。因此,您需要确保类别在流中是唯一的:

change.getAddedSubList().stream()
.map(Place::getCategory)
.distinct()
.filter(c -> !categories.contains(c))
.forEachOrdered(c -> categories.add(c));

请注意,您也不需要收集到临时列表。

关于java-8 - Java 8 列表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864774/

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