我想知道如何在Java 8中使用。 我想将流用于现有句子。
List<t> selected;
List<t> filtered;
for (int count = 0; count < selected.size(); count++) {
if(!StringUtils.endsWithIgnoreCase(selected.get(count).getBasic(), "1")) {
for (int t = 0; t < filtered.size(); t++) {
if (StringUtils.endsWithIgnoreCase(selected.get(count).getTitle(), filtered.get(t).getTitle())) {
selected.set(count, filtered.get(t));
}
}
}
}
答案 0 :(得分:0)
在您修改现有List
时,应使用List.replaceAll
代替Stream API。但是,Stream API可以用作内循环的替代:
selected.replaceAll(sel ->
StringUtils.endsWithIgnoreCase(sel.getBasic(), "1") ? sel :
filtered.stream()
.filter(fil -> StringUtils.endsWithIgnoreCase(sel.getTitle(), fil.getTitle())
.findFirst()
.orElse(sel)
);
请注意,与您的代码相比,它有点不同,因为您的内部循环不会像.findFirst()
那样短路:即使找到匹配后,它仍继续在filtered
列表中搜索。如果是故意的,您应该在我的解决方案中将.findFirst()
替换为.reduce((a, b) -> b)
以获得相同的结果。