流连接结果默认值

时间:2017-04-13 11:34:29

标签: java

如果我通过流加入几个字符串,并且没有任何内容可以加入,那么结果是一个空字符串,如""。是否有可能在它为空时添加默认值?例如。 " - "

someList.stream()
                .filter(a -> a.getKey() != null)
                .map(a -> a.getKey())
                .sorted()
                .collect(Collectors.joining(", ")); 

更新: 我知道还有其他方法可以做到,但我只是想知道""的默认值。 (空字符串)可以覆盖

2 个答案:

答案 0 :(得分:2)

String result = someList.stream()
        .filter(a -> a.getKey() != null)
        .map(a -> a.getKey())
        .sorted()
        .reduce((a,b) -> a + ", " + b).orElse("-");

我们使用reduce而不是collect。

编辑:第一种解决方案确实没有按预期工作。这个是。

答案 1 :(得分:1)

为什么不添加像if (outString.isEmpty()) return "-";

这样的测试

在你的代码之后

String outString = someList.stream()
            .filter(a -> a.getKey() != null)
            .map(a -> a.getKey())
            .sorted()
            .collect(Collectors.joining(", ")); 

if (outString.isEmpty()) 
   return "-";
else 
   return outString;