根据 Java 中的大小追加列表
Append list according to their size in Java
我正在尝试根据它们的大小附加两个列表。前面有更大尺寸的列表。
我很少有这样的列表。
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())
但是我无法获得正确的结果。
谁能指出我的错误,我还在努力学习
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);
可能可以使用 Stream.concat
加入 otherList
的内容,从而摆脱 masterList.addAll
还有一个使用Comparator.reversed()
方法的例子:
List<Pair<Double, String>> masterList = Stream.concat(
Stream.of(listOne, listTwo) // Stream<List<Pair>>
.sorted(Comparator.<List>comparingInt(List::size).reversed())
.flatMap(List::stream), // Stream<Pair>
otherList.stream() // Stream<Pair>
)
.collect(Collectors.toList());
但是,三元运算符也应该可以很好地检测要放在开头的较长列表:
List<Pair<Double, String>> masterList2 = Stream.concat(
(listOne.size() >= listTwo.size()
? Stream.of(listOne, listTwo)
: Stream.of(listTwo, listOne)
)
.flatMap(List::stream),
otherList.stream()
)
.collect(Collectors.toList());
我正在尝试根据它们的大小附加两个列表。前面有更大尺寸的列表。
我很少有这样的列表。
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())
但是我无法获得正确的结果。 谁能指出我的错误,我还在努力学习
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);
可能可以使用 Stream.concat
加入 otherList
的内容,从而摆脱 masterList.addAll
还有一个使用Comparator.reversed()
方法的例子:
List<Pair<Double, String>> masterList = Stream.concat(
Stream.of(listOne, listTwo) // Stream<List<Pair>>
.sorted(Comparator.<List>comparingInt(List::size).reversed())
.flatMap(List::stream), // Stream<Pair>
otherList.stream() // Stream<Pair>
)
.collect(Collectors.toList());
但是,三元运算符也应该可以很好地检测要放在开头的较长列表:
List<Pair<Double, String>> masterList2 = Stream.concat(
(listOne.size() >= listTwo.size()
? Stream.of(listOne, listTwo)
: Stream.of(listTwo, listOne)
)
.flatMap(List::stream),
otherList.stream()
)
.collect(Collectors.toList());