Java 8映射集合,如果集合为空,则添加默认值
我有一个用例,其中我必须返回至少包含1个元素的集合。传入集合可能有0个或多个元素 所以这很容易做到Java 8映射集合,如果集合为空,则添加默认值,java,java-8,Java,Java 8,我有一个用例,其中我必须返回至少包含1个元素的集合。传入集合可能有0个或多个元素 所以这很容易做到 Set<ObjectB> setOfB = collectionOfA.isEmpty() ? new HashSet<ObjectB>() {{ add(new ObjectB()); }} : collectionOfA .stream() .map(item -> new Obje
Set<ObjectB> setOfB = collectionOfA.isEmpty() ?
new HashSet<ObjectB>() {{ add(new ObjectB()); }} :
collectionOfA
.stream()
.map(item -> new ObjectB(item))
.collect(Collectors.toSet());
Set setOfB=collectionOfA.isEmpty()?
新HashSet(){{add(new ObjectB());}}:
收集法
.stream()
.map(项目->新对象B(项目))
.collect(收集器.toSet());
但是
我还试图借此机会更好地熟悉Java8工具和特性,因此我试图看看这是否可以在没有条件测试的情况下以更类似Java8的方式完成
非常感谢您的想法和建议 我想你已经尽可能地简单了。记住,Java8仍然是同一种语言;不要试图让一切都正常运转
我对代码的一个改进是使用
Collections.singleton(new ObjectB())
,而不是笨拙且有问题的双括号初始化。您必须有一个条件,因为只有在调用缩减操作时,计数才可用。但是,对于单个元素集,可以执行以下操作:
Set<ObjectB> setOfB = collectionOfA.isEmpty() ?
Stream.of(new ObjectB()).collect(Collectors.toSet()) :
collectionOfA
.stream()
.map(item -> new ObjectB(item))
.collect(Collectors.toSet());
Set setOfB=collectionOfA.isEmpty()?
Stream.of(新对象B()).collect(收集器.toSet()):
收集法
.stream()
.map(项目->新对象B(项目))
.collect(收集器.toSet());
这可以归结为
Set<ObjectB> setOfB = ( collectionOfA.isEmpty() ?
Stream.of(new ObjectB()) :
collectionOfA.stream().map(item -> new ObjectB(item)) )
.collect(Collectors.toSet())
Set setOfB=(collectionOfA.isEmpty()?
Stream.of(新对象B()):
collectionOfA.stream().map(项->新对象B(项)))
.collect(收集器.toSet())