Java 8流操作

3
假设我有一个名为s的字符串流。是否可能有一个一元操作,将每个单独的字符串转换为两个字符串?
因此,如果原始流包含{a,b,c},并且该操作将每个单个字符串s转换为s + "1"s + "2",那么我们将获得:{a1,a2,b1,b2,c1,c2}
这可行吗(使用Lambda表达式)?
2个回答

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

太好了!这段小代码正好做我想要的事情!我以前从未使用过 flatMap,所以没有想到它。 - Héctor van den Boorn

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接