2017-07-24 87 views
1

如果我想在Java中將兩個列表合併成一個,我可以使用ListUtils.union(List list1,List list2)。但是如果我想合併多個列表呢?在Java中合併多個列表

這工作:

import org.apache.commons.collections.ListUtils; 
List<Integer>list1=Arrays.asList(1,2,3); 
List<Integer>list2=Arrays.asList(4,5,6); 
List<Integer>list3=Arrays.asList(7,8,9); 
List<Integer>list4=Arrays.asList(10,0,-1); 
System.out.println(ListUtils.union(ListUtils.union(list1, list2),ListUtils.union(list3, list4))); 

但它並沒有真正像最好的解決辦法,也不是特別大的閱讀。可悲ListUtils.union(list1,list2,list3,list4)不起作用。多次使用addAll,並創建自己的列表,只是爲了重複所有條目,對我來說也不是很理想。那我能做些什麼呢?

+2

'ListUtils'不是標準的Java API類。你指的是apache-commons的ListUtils類嗎?如果是這樣,請編輯您的問題以清楚說明。 –

+0

@Bit誰說這個OP使用番石榴?您的副本是一個特別提到番石榴的問題,答案也是使用Guava –

+0

@ErwinBolwidt,這個衍生品也有一個原生的Java 8解決方案。 –

回答

8

的Java 8與所示的Stream API幫助做一個簡單的方法在下面的代碼中。我們已經基本上創建了一個包含所有列表的流,然後我們需要列表中的單個內容,需要將其與flatMap平滑並最終收集List中的元素。

List<Integer>list1=Arrays.asList(1,2,3); 
List<Integer>list2=Arrays.asList(4,5,6); 
List<Integer>list3=Arrays.asList(7,8,9); 
List<Integer>list4=Arrays.asList(10,0,-1); 
List<Integer> newList = Stream.of(list1, list2, list3,list4) 
             .flatMap(Collection::stream) 
             .collect(Collectors.toList());  
System.out.println(newList); // prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, -1] 
+2

Java 8很棒! – Fabian

+4

這是可悲的仍然相當多的樣板... –

0

使用ArrayList列出了所有你的列表....

ArrayList<String> arrl = new ArrayList<String>(); 
List<String> list1 = new ArrayList<String>(); 
    list.add("one"); 
    list.add("two"); 
List<String> list2 = new ArrayList<String>(); 
    list.add("one1"); 
    list.add("two2"); 
    arrl.addAll(list1); 
arrl.addAll(list2); 
    System.out.println("After Copy: "+arrl); 

完蛋了你的清單將

0

您可以編寫自己的方法來合併兩個或多個列表。示例:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.stream.Collectors; 
import java.util.stream.Stream; 

public class Test{ 
    public static void main(String[] args) { 
     List<Integer>list1 = Arrays.asList(1,2,3); 
     List<Integer>list2 = Arrays.asList(4,5,6); 
     List<Integer>list3 = Arrays.asList(7,8,9); 
     List<Integer>list4 = Arrays.asList(10,0,-1); 

     System.out.println(combineMyLists(list1,list2,list3,list4)); 
     System.out.println("----------------------"); 
     System.out.println(combineMyLists2(list1,list2,list3,list4)); 
    } 
    private static List<Integer> combineMyLists(List<Integer>... args) { 
     List<Integer> combinedList = new ArrayList<>(); 
     for(List<Integer> list : args){ 
      for(Integer i: list){ 
       combinedList.add(i); 
      } 
     } 
     return combinedList; 
    } 
    private static List<Integer> combineMyLists2(List<Integer>... args) { 
     List<Integer> combinedList = Stream.of(args).flatMap(i -> i.stream()).collect(Collectors.toList()); ; 
     return combinedList; 
    } 
}