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