根据相应索引处的元素从数组创建列表

时间:2019-04-10 06:33:08

标签: java java-8 java-stream

我是Java 8的新手。我只是想知道如何使用Java 8流进行以下操作。有什么建议

<uses-permission android:name="android.permission.INTERNET"/>

输出:

public static void main(String[] args) {
    Integer[] arr1 = new Integer[]{1, 2, 3};
    Integer[] arr2 = new Integer[]{4, 5, 6};
    Integer[] arr3 = new Integer[]{7, 8, 9};

    for(int i=0; i<arr1.length; i++){
        System.out.println(listFromIndex(arr1[i], arr2[i], arr3[i]));
    }
}

private static List<Integer> listFromIndex(Integer e, Integer e1, Integer e2) {
    List<Integer> list = new ArrayList<>();
    list.add(e) ;
    list.add(e1) ;
    list.add(e2) ;
    return list;
}

2 个答案:

答案 0 :(得分:1)

假设数组的长度相同,则可以执行以下操作:

IntStream.range(0, arr1.length)
        .mapToObj(i -> listFromIndex(arr1[i], arr2[i], arr3[i]))
        .forEach(System.out::println);

答案 1 :(得分:1)

如果所有数组的长度都相同,则可以使用以下方法:

List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arr1.length)
        .mapToObj(i -> arrays.stream().map(a -> a[i]).collect(Collectors.toList()))
        .forEach(System.out::println);

这将创建一个包含所有数组的列表。之后,它将创建一个遍历所有数组的流,并收集新数组。

这将打印以下结果:

[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

如果您使用长度不同的数组,则可以使用以下内容:

Integer[] arr1 = new Integer[]{1, 2, 3};
Integer[] arr2 = new Integer[]{4, 5};
Integer[] arr3 = new Integer[]{7};

List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arrays.stream().mapToInt(a -> a.length).max().orElseThrow())
        .mapToObj(i -> arrays.stream().map(a -> i < a.length ? a[i] : null).collect(Collectors.toList()))
        .forEach(System.out::println);

这将使用最大数组的长度,并在收集结果数组之前检查i

结果将是这样:

[1, 4, 7]
[2, 5, null]
[3, null, null]