gpt4 book ai didi

java - 是否可以使用 Stream API 替换不同集合上的嵌套循环

转载 作者:行者123 更新时间:2023-12-02 02:00:41 25 4
gpt4 key购买 nike

我想知道是否可以使用java.utils.stream重写嵌套的for循环在Java 8中?

这是我正在使用的示例数据类型:

class Folder {
private final String name;
private final Integer itemCound;

Folder(String name, Integer itemCount) {
this.name = name;
this.itemCount = itemCount;
}

public String getName() { return this.name; }
public Integer getItemCount() { return this.itemCount; }
}

这是实际的代码:

List<Folder> oldFolders = new ArrayList<>();
List<Folder> newFolders = new ArrayList<>();

// Fill folder collections with sample data...
oldFolders.add(new Folder("folder1", 2));
oldFolders.add(new Folder("folder2", 4));
newFolders.add(new Folder("folder1", 0));
newFolders.add(new Folder("folder2", 100));

// This part should be rewrited using streams
for (Folder newFolder : newFolders) {
for (Folder oldFolder : oldFolders) {
if (newFolder.getName().equals(oldFolder.getName())
&& !newFolder.getItemCount().equals(oldFolder.getItemCount())) {
// do stuff...
}
}
}

P.S:我在 SO 上看到过其他问题,但它们都有 1 个集合或一个具有自己嵌套集合的集合,而不是像我的示例中那样有两个不同的集合。

提前致谢!

最佳答案

公平地说,除非您可以并行化第一次迭代(在本例中进行了注释),否则这并没有太大的改进

List<String> oldList = new ArrayList<>();
List<String> newList = new ArrayList<>();

oldList
//.stream()
//.parallel()
.forEach(s1 ->
newList
.stream()
.filter(s2 -> s1.equals(s2)) //could become a parameter Predicate
.forEach(System.out::println) //could become a parameter Consumer
);

filter 及其 Predicate 替换 if,然后对其执行方法。

这将提供一个可以动态为 filterforEach 提供不同 PredicateConsumer 的解决方案方法。这将是进行此转换的唯一原因。

关于java - 是否可以使用 Stream API 替换不同集合上的嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51630370/

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