2015-08-28 53 views
1

Java列表是否有一個從列表中選擇索引子集的方法?如何獲得列表的非包含子集?

例如,輸入[1, 4, 5]的列表[a, b, c, d, e, f, g]應輸出[a, d, e]

+0

我正在使用java 7,但java 8的方式是什麼? – rossb83

+1

在Collections類中沒有這樣的方法,但是你可以通過使用一個簡單的循環來獲得它。 –

回答

4

在Java 8中這非常容易,只要確保在索引上使用流,而不是在對象上,並使用.map;

public static void main(String[] args) { 
    List<String> stringList = Arrays.asList("a", "b", "c", "d"); 
    List<Integer> indices = Arrays.asList(1, 3); 

    List<String> resultList = indices.stream() 
        .map(i -> stringList.get(i)) 
        .collect(Collectors.toList()); 

    System.out.println(resultList); 
} 

這並不難在Java 7中之一:

public static void main(String[] args) { 
    List<String> stringList = Arrays.asList("a", "b", "c", "d"); 
    List<Integer> indices = Arrays.asList(1, 3); 

    List<String> resultList = new ArrayList<>(); 

    for(int i : indices) { 
    resultList.add(stringList.get(i)); 
    } 

    System.out.println(resultList); 
} 

在這兩種情況下,輸出的是:只有

[b, d] 
+0

我正在尋找一種原生的方式來做到這一點,這正是我所使用的 – rossb83

0

使用一個循環與LinkedHashMap,因爲沒有這樣的特定方法獲取列表中的一個子集(索引集合類。

代碼:

public static void main(String[] args) { 
     List<Character> ls = new ArrayList<Character>(); 
     ls.add('a'); 
     ls.add('b'); 
     ls.add('c'); 
     ls.add('d'); 
     ls.add('e'); 
     ls.add('f'); 
     ls.add('g'); 
//EDIT 
    int subIndex[] = new int[] { 1, 4, 5 }; 
    Map<Integer, Character> result = new LinkedHashMap<>(); 

    for (int i = 0; i < subIndex.length; i++) { 
     result.put(i, ls.get(subIndex[i] - 1)); 
    } 
    System.out.println(result.values());  
} 

輸出: [a, d, e]

我希望這將有助於。

+0

其實,我認爲這是'ade'的輸出,而不是'[a,d,e]' – durron597

+0

@ durron597,感謝提高這一關切。這個輸出是'ade'或者一個d(全都在不同的行中(println()))。 –

+0

@ durron597,請立即檢查。感謝提及。 –

相關問題