栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

连接具有不同最后定界符的字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

连接具有不同最后定界符的字符串

如果它们已经在列表中,则不需要流。只需加入除最后一个元素以外的所有元素的子列表,并连接另一个定界符和最后一个元素:

int last = list.size() - 1;String joined = String.join(" and ",         String.join(", ", list.subList(0, last)),         list.get(last));

这是使用上述功能的版本

Collectors.collectingAndThen:

stream.collect(Collectors.collectingAndThen(Collectors.toList(),    joiningLastDelimiter(", ", " and ")));public static Function<List<String>, String> joiningLastDelimiter(        String delimiter, String lastDelimiter) {    return list -> {     int last = list.size() - 1;     if (last < 1) return String.join(delimiter, list);     return String.join(lastDelimiter,         String.join(delimiter, list.subList(0, last)),         list.get(last)); };}

此版本还可以处理流为空或只有一个值的情况。感谢Holger和Andreas的建议,这些建议极大地改善了此解决方案。

我曾在评论中建议,可以使用

", "
", and"
作为定界符来完成牛津逗号,但是
"a, andb"
对于两个元素而言,这会产生不正确的结果,因此,仅出于娱乐目的,这是正确执行牛津逗号的一个:

stream.collect(Collectors.collectingAndThen(Collectors.toList(),    joiningOxfordComma()));public static Function<List<String>, String> joiningOxfordComma() {    return list -> {     int last = list.size() - 1;     if (last < 1) return String.join("", list);     if (last == 1) return String.join(" and ", list);     return String.join(", and ",         String.join(", ", list.subList(0, last)),         list.get(last)); };}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387637.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号