相关疑难解决方法(0)

如何根据数量从java8中的列表中连接字符串元素?

我有以下结构:

class MyClass {
    String name;
    String descr;

    public String getName() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个这些对象的列表,如果列表包含任何这些元素,我想从上面的对象打印名称.

到目前为止这是我的代码:

List<MyClass> list = getList();

if (list != null && list.size() > 0) {
    System.out.println(list.get(0).getName());
} else {
    System.out.println("list is empty");
}
Run Code Online (Sandbox Code Playgroud)

list只包含一个元素时,这将起作用.现在我需要改进它并考虑一个例子,当有多个元素时 - 在这种情况下我需要打印所有名称,逗号分隔.

例如,输出应该是:

当有3个元素时:

name1,name2,name3 
Run Code Online (Sandbox Code Playgroud)

当有一个元素时:

name1
Run Code Online (Sandbox Code Playgroud)

什么时候没有:

list is empty
Run Code Online (Sandbox Code Playgroud)

什么是最有效的实施方式?

java-8

2
推荐指数
2
解决办法
80
查看次数

自定义收集器仅当流不是空后缀时才在分隔符、后缀和前缀上加入流

我有一个字符串流:

Stream<String> stream = ...;

我想使用创建一个字符串

stream.collect(Collectors.joining(',', '[', ']'))

如果流不包含任何元素,我只想返回“无字符串”。

我注意到该String java.util.stream.Stream.collect(Collector<? super String, ?, String> collector) 方法采用 java.util.stream.Collector<T, A, R> 类型的参数

对于我的项目,我在很多地方都需要这个功能,所以我需要一个实现Collector接口的类。

我知道这可以通过 Stream to a List 然后检查 List.size() == 0 来完成?如果需要,然后再次将列表转换为流。

List<String> list = stream.collect(Collectors.toList());

if (list.size() == 0) {
    return "No Strings";
}
return list.stream().collect(Collectors.joining(",", "[", "]"));`
Run Code Online (Sandbox Code Playgroud)

这就是我想要发生的

List emptyList<String> = new ArrayList<>; System.out.println(emptyList.stream().collect(Collectors.joining(",", "[", "]")));

输出

[]

我想要的输出

No Strings

java java-stream collectors

1
推荐指数
1
解决办法
1558
查看次数

标签 统计

collectors ×1

java ×1

java-8 ×1

java-stream ×1