如何连接 Java 中两个列表中的单词

How to connect words from two lists in Java

我想用两个不同列表中的单词造句。像上面的例子:

"list1w1 list2w1 list1w2 list2w2 list1w3 list2w3..."

我知道如何使用 for 循环,但我想使用流。有可能吗?

我目前的解决方案:

StringBuilder result = new StringBuilder();
for(int i=0; i<doses.size(); i++)
result.append(String.format("%s %s<br>", list1.get(i), list2.get(i)));

使用 IntStream:

String res = IntStream.range(0, list1.size())
        .mapToObj(i -> String.format("%s %s", list1.get(i), list2.get(i)))
        .collect(Collectors.joining("<br>"));

你可以这样做,

IntStream.range(0, list1.size())
    .mapToObj(i -> String.format("%s %s", list1.get(i), list2.get(i)))
    .collect(Collectors.joining("<br>"));

还有另一种方法。

IntStream.range(0, list1.size()).boxed()
    .collect(Collectors.mapping(i -> list1.get(i) + " " + list2.get(i), 
        Collectors.joining("<br>")));

我相信您要找的是平面地图。

大致如下:

List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("1", "2", "3");

List<String> result = list1.stream()
        .flatMap(s1 -> list2.stream().map(s2 -> s1 + s2))
        .collect(Collectors.toList());

System.out.println(result);

这将打印出 [a1, a2, a3, b1, b2, b3, c1, c2, c3],这就是您要查找的内容

你可以使用zip来解决这个问题。

将流与 Eclipse Collections Collectors2.zip() 一起使用:

List<String> one = Arrays.asList("list1w1", "list1w2", "list1w3");
List<String> two = Arrays.asList("list2w1", "list2w2", "list2w3");

String output = one.stream().collect(Collectors2.zip(two))
        .collect(pair -> pair.getOne() + ' ' + pair.getTwo())
        .makeString("<br>");

直接使用 Eclipse 集合 API:

String output = LazyIterate.zip(one, two)
        .collect(pair -> pair.getOne() + ' ' + pair.getTwo())
        .makeString("<br>");

注意:我是 Eclipse Collections 的提交者。