如何在Java中合并两个不可修改的集合?

如何合并两个unmodifiable static final集?

public static final Set<Long> ORG_SUBSCRIber_ALLOWED_NUMber_CD = Set.of(COMPANY_GST,GOVERnmENT_BODY_GST);

public static final Set<Long> INDIVIDUAL_SUBSCRIber_ALLOWED_NUMber_CD = Set.of(BUSInesS_PAN,INDIVIDUAL_PAN);

我想将上述静态最终集合合并为一组(单语句初始化),因为它是一个Class变量

public static final Set<Long> SUBSCRIber_ALLOWED_NUMber_CD = ?
iCMS 回答:如何在Java中合并两个不可修改的集合?

Stream#concat也很有用

Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD  =  
         Stream.concat(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD.stream(),INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD.stream())
                .collect(Collectors.toSet());
,

如果要使用流:

public static final Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD =
    Stream.of(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD,INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD)
        .flatMap(Set::stream)
        .collect(Collectors.toSet());

或者,就您的情况而言,如注释中所述,您可以使用Collectors.toUnmodifiableSet()

public static final Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD =
    Stream.of(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD,INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD)
        .flatMap(Set::stream)
        .collect(Collectors.toUnmodifiableSet());
,

只需指出,与仅JDK的解决方案相比,Guava处理此案的可读性更高(并且性能可能更高):

public static final Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD = ImmutableSet.builder()
    .addAll(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD)
    .addAll(INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD)
    .build();
,

您为什么不能创建第三组,而只添加两个最终组?

Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD = new HashSet<>();
SUBSCRIBER_ALLOWED_NUMBER_CD.addAll(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD);
SUBSCRIBER_ALLOWED_NUMBER_CD.addAll(INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD);

前两个集合为final仅表示您不能修改那些集合。它不会阻止您将集合读入另一个新集合。

,

单语句初始化,如果需要的话:

public static final Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD = 
     Collections.unmodifiableSet(
        Stream.of(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD,INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD)
              .flatMap(Set::stream)
              .collect(Collectors.toSet()));

或者,也许更具可读性:

public static final Set<Long> SUBSCRIBER_ALLOWED_NUMBER_CD;
static {
    Set<Long> all = new HashSet<>();
    all.addAll(ORG_SUBSCRIBER_ALLOWED_NUMBER_CD);
    all.addAll(INDIVIDUAL_SUBSCRIBER_ALLOWED_NUMBER_CD);
    
    SUBSCRIBER_ALLOWED_NUMBER_CD = Collections.unmodifiableSet(all);
}

如果预计第三组不可修改,则忽略Collections.unmodifiableSet调用。

本文链接:https://www.f2er.com/1815253.html

大家都在问