gpt4 book ai didi

java - 使用 Java 8 Streams 减少字符串列表,仅向最后一个元素添加前缀

转载 作者:行者123 更新时间:2023-12-01 21:22:55 26 4
gpt4 key购买 nike

如何使用 Java 8 Streams 减少或收集由逗号分隔并仅在最后一个元素添加前缀“and”的字符串列表?

例如。

List<String> ls = Arrays.asList("tom","terry","john","kevin","steve");

String result = ls.stream().map(String::toString)
.collect(Collectors.joining(", "));

System.out.println(result);

此语句打印 => tom, terry, john, kevin, steve。但我想将列表打印为汤姆、特里、约翰、凯文和史蒂夫。

最佳答案

两种解决方案。

笨拙,实际上采用子列表:

    String result = ls.stream()
.limit(ls.size() - 1)
.collect(Collectors.joining(", ")) + " and " + ls.get(ls.size() - 1);

使用类移动一个位置:

    class SbS {
StringBuilder sb = new StringBuilder();
String s = "";

@Override
public String toString() {
return sb + (s.empty() ? "" : " and " + s);
}
}
result = ls.stream()
.collect(SbS::new,
(a, s) -> {
a.sb.append(a.sb.length() == 0 ? "" : ", ").append(a.s); a.s = s;
},
(a1, a2) -> {}).toString();

注意:类定义应该放在方法内部,就像上面一样。否则将需要static(a, s) 的 lambda 可以是 SbS 中的一个方法。对并行性的支持留给读者作为练习(a1, a1)

关于java - 使用 Java 8 Streams 减少字符串列表,仅向最后一个元素添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com