Java 8映射集合,如果集合为空,则添加默认值

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

我有一个用例,其中我必须返回至少包含1个元素的集合。传入集合可能有0个或多个元素

所以这很容易做到

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