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

How do I concatenate two lists to create a 3rd?

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

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

copyList1.addAll(list2);

您可以使用

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

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

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

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

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

如果 SortedSet 也像 return 类型一样好(我发现在大多数情况下这是你真正想要的)你可以这样做:

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

在 Java 8 中(将字符串替换为您的列表包含的任何类型):

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

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

按照您在 post 中提到的方式对其进行排序
Collections.sort(newList);

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

在Java 8:

List<E> sorted = Stream.concat(l1.stream(), l2.stream())
                       .sorted()
                       .collect(Collectors.toList());
List<Something> list = Lists.newArrayList(Iterables.concat(...));
Collections.sort(list);

这里可能是一个解决方案。

以下应与 JAVA 8 Stream API

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