2016-07-22 6 views
1

In einer Liste von Arrays, in Java, gibt es eine Möglichkeit, eine Liste zu erhalten, die aus allen i-ten Elementen auf den Arrays besteht, die meine ursprüngliche Liste umfassen?Abrufen von inneren Elementen in Java

Zum Beispiel (Pseudocode):

Eingang:

List<int[3]> A = {[1,2,3], [2,3,5], [1,0,7]} 
i = 2 

Ausgang:

B = {2,3,0} 

ich wirklich mag, dies zu erreichen, ohne explizit eine for-Schleife schreiben oder While-Schleife oder irgendeine andere reguläre Schleifenstruktur. Irgendwelche Ideen?

+1

brauchen Was meinen Sie, ohne explizit Looping? – Compass

+0

Hast du versucht, das selbst zu lösen ??? –

+0

Versuchen Sie, eine Methode zu finden, die in die Java-Klasse 'List' integriert ist, die das für Sie erledigt? –

Antwort

3

könnten Sie streams verwenden:

int i = 2; 
List<Integer> listB = listA.stream() 
    .filter(arr -> arr.length > i) // (Optional) Filter out arrays that are too small. 
    .map(arr -> arr[i]) // Get element at index i. 
    .collect(Collectors.toList()); // Collect into a list. 
+0

Danke! das hat funktioniert. Genau wie LINQ in C#. Danke für Ihre Hilfe :) – oma07

0

Vor Java 8 dann haben Sie keine andere Art und Weise als über die Liste gehen und jedes Element in der gewünschten Position Kommissionierung:

Beispiel:

Vor Java8

public static void main(String[] args) { 

List<int[]> aL = new ArrayList(); 
aL.add(new int[] { 1, 2, 3 }); 
aL.add(new int[] { 2, 3, 5 }); 
aL.add(new int[] { 1, 0, 7 }); 
int index = 1; 
List<Integer> aLFinal = new ArrayList(); 

for (int[] i : aL) { 
    aLFinal.add(i[index]); 
} 
System.out.println("the list before java8 " + aLFinal); 
} 

Nach Java8

aLFinal = aL.stream().map(arr -> arr[index]).collect(Collectors.toList()); 
System.out.println("the list after java8 " + aLFinal); 
0

Hoffnung ist das, was Sie

public List<Integer> getYourResult(List<Integer[]> yourList, int index) { 
    if (index >= 3) return null; 
    List<Integer> result = new ArrayList<>(); 
    for (int i = 0; i < yourList.size(); ++i) { 
     result.add(i, yourList.get(i)[index]); 
    } 
    return result; 
}