如何连接 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 的提交者。
我想用两个不同列表中的单词造句。像上面的例子:
"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 的提交者。