假设我有一个名为s
的字符串流。是否可以使用一元操作将每个单独的String转换为两个字符串?
因此,如果原始Stream包含{a,b,c}
并且操作将每个字符串s
转换为s + "1"
和s + "2"
,那么我们将得到:{a1,a2,b1,b2,c1,c2}
。< / p>
这是否可行(使用lambda表达式)?
答案 0 :(得分:13)
是的,你可以使用flatMap
之类的
stream.flatMap(s -> Stream.of(s + "1", s + "2"));
示例:
Stream.of("a", "b", "c") // stream of "a", "b", "c"
.flatMap(s -> Stream.of(s + "1", s + "2")) // stream of "a1", "a2", "b1", "b2", "c1", "c2"
.forEach(System.out::println);
输出:
a1
a2
b1
b2
c1
c2
答案 1 :(得分:5)
您可以使用flatMap
public Stream<String> multiply(final Stream<String> in, final int multiplier) {
return in.flatMap(s -> IntStream.rangeClosed(1, multiplier).mapToObj(i -> s + i));
}
用法:
final Stream<String> test = Stream.of("a", "b", "c");
multiply(test, 2).forEach(System.out::println);
输出:
a1
a2
b1
b2
c1
c2