Java 8 Stream操作

时间:2015-06-09 20:38:50

标签: java lambda java-8 java-stream

假设我有一个名为s的字符串流。是否可以使用一元操作将每个单独的String转换为两个字符串?

因此,如果原始Stream包含{a,b,c}并且操作将每个字符串s转换为s + "1"s + "2",那么我们将得到:{a1,a2,b1,b2,c1,c2}。< / p>

这是否可行(使用lambda表达式)?

2 个答案:

答案 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