【发布时间】:2019-12-17 11:14:35
【问题描述】:
我有一个包含对象的列表,即狗。狗可以是雄性或雌性。这是 Object 中的一个变量。
我需要遍历 Dogs,对于每只公狗,我需要查看是否有与公狗的两个变量匹配的母狗。
如Dog.getName()、Dog.getAge()。所以我会有一个男性和女性匹配他们的名字和年龄。
如果我找到匹配项,我需要将两条 Dogs 添加到新列表中。
弄清楚如何使用 Java 8 来做这件事让我发疯了,并且真的可以使用一些建议。
我已经完成了一些代码,但想知道我是否可以让它更有效率。
到目前为止我要做的事情:
List<Dog> dogsA = unmatchedDogs
.stream()
.filter(
dogA ->{
return dogA.getGender().equalsIgnoreCase("Male");
}
)
.collect(Collectors.toList());
List<Dog> dogsB = unmatchedDogs
.stream()
.filter(
dogB ->{
return dogB.getGender().equalsIgnoreCase("Female");
}
)
.collect(Collectors.toList());
List<Dog> dogsToUpdate = new ArrayList<>();
dogsA.stream()
.flatMap(x -> dogsB
.stream()
.filter(y -> x.getAge().equalsIgnoreCase(y.getAge()))
.filter(y -> x.getName().equalsIgnoreCase(y.getName()))
.limit(1))
.forEach(product -> dogsToUpdate.add(product));
dogsB.stream()
.flatMap(x -> dogsA
.stream()
.filter(y -> x.getAge().equalsIgnoreCase(y.getAge()))
.filter(y -> x.getName().equalsIgnoreCase(y.getName()))
.limit(1))
.forEach(product -> dogsToUpdate.add(product));
【问题讨论】:
-
你的代码有什么问题?
-
“如何使用 Java 8 循环”——什么是 Java 8 循环?在您的代码中,我只能看到一些流,而不是单个循环。
-
对不起,我编辑了标题,我正在努力让它不那么麻烦。伸出手看看是否有更有效的方法
-
@Random 如果某些答案对您有所帮助并确实解决了您的问题,请接受它,因此问题将被关闭