关于数组:在Java中检索内部元素

Retrieving inner elements in java

本问题已经有最佳答案,请猛点这里访问。

在一个数组列表中,在Java中,有一种方法可以得到一个列表,该列表是由组成原始列表的数组中的所有元素组成的吗?

例如(伪代码):

输入:

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

输出:

1
B = {2,3,0}

我真的希望在不显式编写for循环、while循环或任何其他常规循环结构的情况下实现这一点。有什么想法吗?


您可以使用流:

1
2
3
4
5
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.


希望这是你需要的

1
2
3
4
5
6
7
8
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;
}


在Java 8之前,你别无选择地越过列表并在期望的位置挑选每一个元素:

例子:

在Java8之前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}

Java8之后

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