我试图根据它们的大小附加两个列表。前面有更大的列表。
我很少有这样的清单。 List<Pair<Double, String>> masterList = new ArrayList<>();
这是我第一次尝试的工作java代码-使用一个简单的 if else
循环:
if (listOne.size() >= listTwo.size()){
masterList.addAll(listOne);
masterList.addAll(listTwo);
} else {
masterList.addAll(listTwo);
masterList.addAll(listOne);
}
masterList.addAll(otherList); // and at the end all other list can be added without any condition
我对java相当陌生,所以我在研究它时遇到了comparators和lambda。所以,我试着在我的代码中使用它,比如:
List<Pair<Double, String>> masterList = Stream.concat(listOne.stream(), listTwo.stream())
.filter(Comparator.comparingInt(List::size))
.collect(Collectors.toList())
但我无法取得适当的结果。如果有人能指出我的错误,我仍在努力学习。
2条答案
按热度按时间tyky79it1#
for循环非常好,
Stream
没有必要,但是要回答这个问题,你可以不用
concat
因为它已经加入了列表,而你失去了不同列表的概念不要使用
filter
而是sorted
然后flatMap
传Stream<List<Pair<>>>
到Stream<Pair<>>
```List<Pair<Double, String>> masterList = Stream.of(listOne, listTwo)
.sorted(Comparator.comparing(List::size, Comparator.reverseOrder()))
.flatMap(List::stream)
.collect(Collectors.toList());
masterList.addAll(otherList);
yebdmbv42#
也许可以使用
Stream.concat
加入otherList
从而摆脱masterList.addAll
此外,还有一个使用Comparator.reversed()
方法:但是,三元运算符也可以检测一个较长的列表,将其放在开头: