在java中,根据列表的大小追加列表

hec6srdp  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(364)

我试图根据它们的大小附加两个列表。前面有更大的列表。
我很少有这样的清单。 List<Pair<Double, String>> masterList = new ArrayList<>(); 这是我第一次尝试的工作java代码-使用一个简单的 if else 循环:

  1. if (listOne.size() >= listTwo.size()){
  2. masterList.addAll(listOne);
  3. masterList.addAll(listTwo);
  4. } else {
  5. masterList.addAll(listTwo);
  6. masterList.addAll(listOne);
  7. }
  8. masterList.addAll(otherList); // and at the end all other list can be added without any condition

我对java相当陌生,所以我在研究它时遇到了comparators和lambda。所以,我试着在我的代码中使用它,比如:

  1. List<Pair<Double, String>> masterList = Stream.concat(listOne.stream(), listTwo.stream())
  2. .filter(Comparator.comparingInt(List::size))
  3. .collect(Collectors.toList())

但我无法取得适当的结果。如果有人能指出我的错误,我仍在努力学习。

tyky79it

tyky79it1#

for循环非常好, Stream 没有必要,但是要回答这个问题,你可以
不用 concat 因为它已经加入了列表,而你失去了不同列表的概念
不要使用 filter 而是 sorted 然后 flatMapStream<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);

yebdmbv4

yebdmbv42#

也许可以使用 Stream.concat 加入 otherList 从而摆脱 masterList.addAll 此外,还有一个使用 Comparator.reversed() 方法:

  1. List<Pair<Double, String>> masterList = Stream.concat(
  2. Stream.of(listOne, listTwo) // Stream<List<Pair>>
  3. .sorted(Comparator.<List>comparingInt(List::size).reversed())
  4. .flatMap(List::stream), // Stream<Pair>
  5. otherList.stream() // Stream<Pair>
  6. )
  7. .collect(Collectors.toList());

但是,三元运算符也可以检测一个较长的列表,将其放在开头:

  1. List<Pair<Double, String>> masterList2 = Stream.concat(
  2. (listOne.size() >= listTwo.size()
  3. ? Stream.of(listOne, listTwo)
  4. : Stream.of(listTwo, listOne)
  5. )
  6. .flatMap(List::stream),
  7. otherList.stream()
  8. )
  9. .collect(Collectors.toList());
展开查看全部

相关问题