从Set Java 8中删除元素

时间:2019-03-27 20:46:48

标签: java java-8 set

static final List<String> allowedType = asList(type1,type2);

Set<String> set1 = serviceClass.getType()
                               .stream()
                               .filter(type -> allowedType.contains(type))
                               .collect(toSet());

需求包括两部分,

第1部分。如果从serviceClass接收的类型具有allowedType中提到的任何服务类型,则将其添加到set1。

第2部分。完成上述操作后,我需要检查set1是否包含两种类型,如果是,则需要删除一种类型。

第1部分很简单,到目前为止,我已经使用

实现了第2部分
if (set1.contains("type1" && set1.contains("typep2") {
    set1.remove("type");
}

第1部分和第2部分是否可以合并为一个操作?

谢谢

1 个答案:

答案 0 :(得分:1)

如果总是有两种类型,并且您始终可以保留其中最多一种,则可以使用limit

    Set<String> set1 = serviceClass.getType()
           .stream()
           .filter(type -> allowedType.contains(type))
           .limit(1)
           .collect(toSet());
如果至少一个元素通过过滤器,则

limit(1)将返回1个元素的流,否则返回空流。在我看来,这可以满足您的要求(未经测试)。