相关疑难解决方法(0)

使用逗号和"和"将Java中的List <String>连接起来

给出一个清单

List<String> l = new ArrayList<String>();
l.add("one");
l.add("two");
l.add("three");
Run Code Online (Sandbox Code Playgroud)

我有一个方法

String join(List<String> messages) {
        if (messages.isEmpty()) return "";
        if (messages.size() == 1) return messages.get(0);
        String message = "";
        message = StringUtils.join(messages.subList(0, messages.size() -2), ", ");
        message = message + (messages.size() > 2 ? ", " : "") + StringUtils.join(messages.subList(messages.size() -2, messages.size()), ", and ");
        return message;
    }
Run Code Online (Sandbox Code Playgroud)

对于l,产生"一,二,三".我的问题是,是否有一个标准(apache-commons)方法做同样的事情,例如

WhatEverUtils.join(l, ", ", ", and ");
Run Code Online (Sandbox Code Playgroud)

澄清.我的问题是没有让这种方法起作用.它就像我想要的那样工作,经过测试,一切都很好.我的问题是我找不到一些实现这种功能的类似apache-commons的模块.这让我感到惊讶,因为我不能成为第一个需要这个的人.

但是,也许其他人都刚刚完成了

StringUtils.join(l, ", ").replaceAll(lastCommaRegex, ", and");
Run Code Online (Sandbox Code Playgroud)

java join apache-commons

49
推荐指数
7
解决办法
4万
查看次数

如何使用for迭代Java中的流?

我有这个代码:

List<String> strings = Arrays.asList("a", "b", "cc");
for (String s : strings) {
    if (s.length() == 2)
        System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

我想用过滤器和lambda来编写它:

for (String s : strings.stream().filter(s->s.length() == 2)) {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

我得到Can only iterate over an array or an instance of java.lang.Iterable.

我尝试:

for (String s : strings.stream().filter(s->s.length() == 2).iterator()) {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误.这甚至可能吗?我真的不想做stream.forEach()并传递消费者.

编辑:对我来说重要的是不要复制元素.

java foreach lambda java-8 java-stream

39
推荐指数
1
解决办法
4万
查看次数

标签 统计

java ×2

apache-commons ×1

foreach ×1

java-8 ×1

java-stream ×1

join ×1

lambda ×1