Vex*_*toR 4 java collections java-8 java-stream
如果流为空,有没有一种很好的方法来创建不同的List?
如果special
为空,我想创建一个List
带有另一个值的new .但如果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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想将它作为一个管道,那么你可以这样做:
List<String> strings =
Optional.of(special)
.filter(e -> !e.isEmpty())
.map(l -> l.stream().map(s -> createNewVal(s))
.collect(Collectors.toList()))
.orElseGet((() -> Collections.singletonList(myString)));
Run Code Online (Sandbox Code Playgroud)
但是,我不建议继续使用这种方法,因为它不是Optional的预期目的.
相反,你会更好:
List<String> result;
if(special.isEmpty())
result = Collections.singletonList(myString);
else
result = special.stream().map(s -> createNewVal(s)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96 次 |
最近记录: |