首页 > 解决方案 > 从 Set Java 8 中删除一个元素

问题描述

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 部分可以合并为一个操作吗?

谢谢,

标签: javajava-8set

解决方案


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

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

limit(1)如果至少有一个元素通过过滤器,则返回 1 个元素的流,否则返回空流。在我看来,这会给你你所要求的(未经测试)。


推荐阅读