如何解决Java-在流中连接连续元素
我试图将一个数组中的两个连续元素连接起来。我可以反复进行此操作,但是我正在尝试学习Java Streams,并认为这将是一个很好的练习。
如果我有一个字符串数组:
String exampleArray[] = ["a1","junk","a2","b1","b2","c1","c2","d1","d2","junk-n"]
我想得到:
["a1 - a2","b1 - b2","c1 - c2","d1 - d2"]
作为输出。
我尝试过:
Arrays.asList(exampleArray)
.stream()
.filter(s -> s.length() > 0) // gets rid of blanks
.filter(s -> !s.contains("junk"))
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 2))
.values();
这将返回Collection<List<String>>
之类的[ [a1,a2],[b1,b2],[c1,c2],[d1,d2] ]
但是我不确定如何到达:["a1 - a2","d1 - d2"]
感谢您的帮助!
解决方法
您快到了。您已经拥有了配对,现在要做的就是用中间的“-”将它们粉碎成String。
尝试一下:
Arrays.stream(exampleArray)
.filter(s -> s.length() > 0) // gets rid of blanks
.filter(s -> !s.contains("junk"))
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 2))
.values()
.stream() //stream the pairs
.map(l -> String.join("-",l)) //and put a "-" between them & into a string
.collect(Collectors.toList()) //collect all your joined String
,
Collectors.groupingBy具有重载的方法,您可以在其中将结果传递给下游收集器。实际上,默认情况下它使用了toList收集器,因此您得到了List。您可以使用joinBy串联字符串。
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 2,Collectors.joining(" - ")))
结果是
[a1-a2,b1-b2,c1-c2,d1-d2]
代码
public static void main(String[] args) {
String exampleArray[] = new String[] {"a1","junk","a2","b1","b2","c1","c2","d1","d2","junk-n"};
AtomicInteger counter = new AtomicInteger(0);
Collection<String> ans = (Arrays.asList(exampleArray)
.stream()
.filter(s -> s.length() > 0) // gets rid of blanks
.filter(s -> !s.contains("junk"))
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 2,Collectors.joining(" - ")))
.values());
System.out.println(ans);
}
,
实现此输出的一种简单方法是:
String a[] = {"a1","junk-n"};
Arrays.parallelSort(a); //sorting the array from a to z
List<String> output = new ArrayList<>();
for (int i = 0; i < a.length - 1; i++) {
if(a[i].matches(".*\\d.*")) //verifying if have a number in string
output.add(a[i] + " - " + a[++i]);
}
System.out.println(output); //["a1 - a2","b1 - b2","c1 - c2","d1 - d2"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。