簡體   English   中英

如何連接兩個列表以創建第三個列表?

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

我一直在尋找這個問題,並且找到了這個答案 番石榴中有一個Iterables.concat 但這會返回一個Iterable ,接下來我要做的就是對結果進行排序。 Collections.sort接受一個List ,而不是一個Iterable因此下一步,我必須將Iterable轉換為List 有沒有更直接的方法來合並兩個List ,然后對結果進行排序?

在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);

可能是這里的解決方案。

List有addAll(Collection )方法,我認為這對您有用。 您可以復制第一個列表並進行如下操作:

copyList1.addAll(list2);

如果將SortedSet用作返回類型也很不錯(我發現在大多數情況下這是您真正想要的返回類型),則可以執行以下操作:

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

您可以使用

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 );

在Java 8中(將String替換為列表包含的任何類型):

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

這將連接您的兩個列表以創建一個新的第三列表。 然后,可以使用Collections.sort對其進行排序(如您在帖子中提到的那樣):

Collections.sort(newList);

另請參閱: 如何在Java中加入兩個列表?

以下應與JAVA 8 Stream API一起使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM