双 a 流
2022-09-02 12:06:38
创建一个包含当前元素两次的内部流,并平映射此流。
stream.flatMap(e -> Stream.of(e,e))
如果要将元素数乘以,可以创建一个实用程序方法,如下所示:n
public static <T> Stream<T> multiplyElements(Stream<T> in, int n) {
return in.flatMap(e -> IntStream.range(0, n).mapToObj(i -> e));
// we can also use IntStream.rangeClosed(1, n)
// but I am used to iterating from 0 to n (where n is excluded)
}
(但尝试为此方法使用更好的名称,因为当前的名称可能不明确)
用法示例:
multiplyElements(Stream.of(1,2), 3).forEach(System.out::println);
输出:
1
1
1
2
2
2
您可以为每个原始元素创建一个包含 2 个元素的流,并将其平映射:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 4, 5);
List<Integer> doubled = list.stream().flatMap(i -> Stream.of(i, i)).collect(toList());