如何避免内部循环并仅使用流功能编写此“分配”?
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));
您无需执行任何操作。您可以从字面上将每个String映射到一个Character,然后在流上使用distinct()获得所有不同的值。
Stream.of(l).map(value -> value.charAt(0)).distinct().forEach(value -> {
System.out.println("value: " + value);
});