我如何避免内循环

问题描述 投票:0回答:1

如何避免内部循环并仅使用流功能编写此“分配”?

String[] l = { "a", "a", "b", "c", "d", "d", "d", "d", "a", "a" };
String[] l2 = 
        IntStream.iterate(0, i -> i < l.length, i -> i + 2)
        .mapToObj(i -> Objects.hash(l[i], l[i + 1]))
        .distinct()
        .map(h -> {
            for (int j = 0; j < l.length; j += 2) {
                if (h == Objects.hash(l[j], l[j + 1])) {
                    return new String[] { l[j], l[j + 1] };
                }
            }
            return null;
        })
        .flatMap(Arrays::stream)
        .toArray(String[]::new);
System.out.println(Arrays.toString(l2));
java multidimensional-array stream
1个回答
0
投票

您无需执行任何操作。您可以从字面上将每个String映射到一个Character,然后在流上使用distinct()获得所有不同的值。

        Stream.of(l).map(value -> value.charAt(0)).distinct().forEach(value -> {
            System.out.println("value: " + value);
        });
© www.soinside.com 2019 - 2024. All rights reserved.