如何连接两个列表以创建第三个?

时间:2015-02-04 18:42:13

标签: java guava

我一直在谷歌搜索,我找到了this answer。番石榴中有一个Iterables.concat。但是这会返回Iterable,接下来要做的就是对结果进行排序。 Collections.sort只需List而不是Iterable,因此我必须将Iterable转换为List作为我的下一步。是否有更直接的方法来组合两个List然后对结果进行排序?

7 个答案:

答案 0 :(得分:6)

在Java 8中:

List<E> sorted = Stream.concat(l1.stream(), l2.stream())
                       .sorted()
                       .collect(Collectors.toList());

答案 1 :(得分:4)

List<Something> list = Lists.newArrayList(Iterables.concat(...));
Collections.sort(list);

可能是一个解决方案。

答案 2 :(得分:3)

列表包含addAll(Collection)方法,我认为这对您的目的很有用。您可以复制第一个列表并进行如下操作:

copyList1.addAll(list2);

答案 3 :(得分:2)

如果一个SortedSet也很好作为返回类型(我发现这是你真正想要的那个),你可以这样做:

FluentIterable.from( list1 ).concat( list2 ).toSortedSet( Ordering.natural() );

答案 4 :(得分:1)

您可以使用

List<Something> list1;
List<Something> list2;

list1.addAll(list2);
Collections.sort( list1 );

(假设您的列表是Comparable s)的列表

如果您不想修改list1,可以使用:

List<Something> list3 = new ArrayList<>();
Collections.copy( list3, list1 );
list3.addAll( list2 );
Collections.sort( list3 );

答案 5 :(得分:1)

在Java 8中(用您的列表包含的任何类型替换String):

List<String> newList = Stream.concat(listOne.stream(), listTwo.stream()).collect(Collectors.<String>toList());

这将连接您的两个列表以创建新的第3个列表。然后,您可以使用Collections.sort

对帖子中提到的内容进行排序
Collections.sort(newList);

另请参阅:How do I join two lists in Java?

答案 6 :(得分:1)

以下内容适用于JAVA 8 Stream API

class T {
     @Getter private int sortingProperty; 
    }
 List<T> list3 Stream.of(list1OfT,list2OfT)    
                                 .sorted(Comparing(T::getSortingProperty))
                                 .collect(toList());