当前位置: 首页 > 知识库问答 >
问题:

使用 java 流用分隔符连接两个集的元素

孙岳
2023-03-14

我有两组说:

ImmutableSet<String> firstSet = ImmutableSet.of("1","2","3");
ImmutableSet<String> secondSet = ImmutableSet.of("a","b","c");

我想得到一个集合,其中包括第一个集合的元素与第二个集合的每个元素连接,以及一个分隔符,即输出应该是:

ImmutableSet<String> thirdSet = ImmutableSet.of("1.a","1.b","1.c","2.a","2.b","2.c","2.c","3.a","3.b","3.c");

(这里.是我的分隔符)

我最初认为可以通过流式传输第一个集合并应用<code>收集器来实现这一点。在第二个元素上加入(),但这不能解决我的需要。

共有2个答案

凌景辉
2023-03-14

好像你用的是番石榴。在这种情况下,只需使用< code > sets . cartesian product 方法

Set<List<String>> cartesianProduct = Sets.cartesianProduct(firstSet,secondSet);
for (List<String> pairs : cartesianProduct) {
    System.out.println(pairs.get(0) + "." + pairs.get(1));
}

输出:

1.a
1.b
1.c
2.a
2.b
2.c
3.a
3.b
3.c

如果要在不可变集中收集它

ImmutableSet<String> product = ImmutableSet.copyOf(
        cartesianProduct.stream()
                        .map(pairs -> pairs.get(0) + "." + pairs.get(1))
                        .toArray(String[]::new)
);

呼延俊良
2023-03-14

我最初以为我可以通过流式传输第一组并在第二组的元素上应用Collectors.joining()来做到这一点,但这并不能解决我的需求。

您可以做的是流式传输第一个集合,并将每个元素与第二个集合的所有元素进行平面映射。

import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toSet;

...

ImmutableSet<String> thirdSet = 
    firstSet.stream()
            .flatMap(s1 -> secondSet.stream().map(s2 -> s1+"."+s2))
            .collect(collectingAndThen(toSet(), ImmutableSet::copyOf));

如果您直接想要收集到不可变集中,则可以使用不可变集的构建器创建自定义收集器(另请参阅如何将Java 8流收集到Guava不可变集合中?)。

 类似资料:
  • 问题内容: 假设我有一个数组: 而且我需要使用分隔符(例如)来连接其元素,因此结果应该是这样的字符串: 我该怎么办? PS: 是的,我知道这件事和这篇文章,但是它的解决方案不适用于一系列原语。 问题答案: 这是我想出的。有几种方法可以执行此操作,它们取决于您使用的工具。 使用和来自Common Lang : 您不能只使用它,因为它没有方法的重载版本。虽然,它有方法。 适用于1.2以上的任何Java

  • 我怎么能这么做? PS:是的,我知道这篇文章和这篇文章,但它的解决方案不能用原语数组。

  • 我正在构建一个名为“id”的查询参数,它是一个列表,所以我有类似于localhost:8080/application?id=1 (我知道我的方法不够,我需要写第一个?id=) 方法 我的问题是:为什么我收到这个错误在Collectors.joining(" 我正在使用OpenJDK

  • 问题内容: 有没有一种很好的方法可以使用Java流以相同类型的分隔符插入流中的元素? 这类似于Haskell和其他功能语言中的功能。 我已经看到了许多有关如何以类似方式连接字符串的示例,但没有找到任何针对常规列表的解决方案。 问题答案: 您可以使用flatMap来完成此操作,但是在最后一个元素之后会得到一个附加的分隔符: 这是没有尾随分隔符的另一种方式: 这次,我们在每个原始元素之前添加分隔符,并

  • 问题内容: 我有一个值为的字符串。我想将字符串分成两个字符串,值为的字符串和的值为字符串。 正确的功能/语法是什么? 我已经看过了,但是找不到将数据返回到两个单独的字符串中的实际语法。 问题答案: 该功能适用于:

  • 下面的代码片段是从JoinedStreams的javadoc复制的 这两个流仅基于一个键(通过< code>t =计算)进行连接 我会问我如何基于多个键进行连接,例如,one.a = two.a和