如果流是空的,有没有好的方法来创建一个不同的列表?
这里如果 special
是空的我想创建一个新的 List
另一个价值观。但如果 special
我要创建的不是空的 List
基于 special
. 我不知道有没有一个很好的方法把这些和一个流结合起来
这里有一个不太好的解决方案
class X {
public static void main(String[] args) {
String myString = "test";
List<String> special = getSpecialVals();
List<String> newVals =
special.isEmpty() ?
Arrays.asList(myString) :
special.stream().map(s ->
createNewVal(s)).collect(Collectors.toList());
}
static public List<String> getSpecialVals() {
// but can return empty list
return Arrays.asList("One", "Two");
}
static public String createNewVal(String origVal) {
return origVal.toUpperCase();
}
}
2条答案
按热度按时间pdsfdshx1#
如果您坚持将其保留在流管道中,您可以:
我更喜欢你自己的代码。
作为旁白,而不是
.map(s -> createNewVal(s))
你可以用.map(X::createNewVal)
(因为你们班叫X
). 喜欢哪一种主要是口味的问题。axzmvihb2#
如果您想将其作为单个管道,则可以执行以下操作:
但是,我不建议继续使用这种方法,因为这不是optional的预期目的。
相反,最好是:
后者显然更具可读性,因此大脑在试图弄清发生了什么时所做的工作更少
后者还避免了创建一个可选示例,从而提高了效率