gpt4 book ai didi

java - 如果 Stream 为空,如何创建不同的列表

转载 作者:搜寻专家 更新时间:2023-11-01 01:20:07 27 4
gpt4 key购买 nike

如果流为空,是否有创建不同列表的好方法?

这里,如果 special 为空,我想用另一个值创建一个新的 List。但是如果 special 不为空,我想创建基于 specialList。我不知道是否有将这些与流结合起来的好方法

这是一个不太好的解决方案

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();
}
}

最佳答案

如果你想把它作为一个单一的管道,那么你可以这样做:

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)));

但是,我不建议继续使用这种方法,因为它不是 Optional 的预期目的。

相反,你会更好:

List<String> result;
if(special.isEmpty())
result = Collections.singletonList(myString);
else
result = special.stream().map(s -> createNewVal(s)).collect(Collectors.toList());
  • 后者绝对更具可读性,因此减少了大脑试图弄清楚发生了什么。 ;)
  • 后者还避免创建 Optional 实例,从而提高效率

关于java - 如果 Stream 为空,如何创建不同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654825/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com