猿问

如何在方法中流式传输Java List(Varargs)的值?

我有以下方法:

public static List<A> getValuesExclusion(A exclusion) {
        return Arrays.stream(values())
                .filter(item -> item != exclusion)
                .collect(Collectors.toList());}//this function returns enum list of A types that has no A type'exclusion'

现在我想将它作为参数列入一个列表:

public static List<A> getValuesExclusion(A... exclusions){
        return Arrays.stream(values())
                .filter(???)
                .collect(Collectors.toList());}

我的问题是,如何针对第二种情况进行过滤?我想检索一个枚举列表,该列表排除所有值“排除”作为输入。以下是A类的属性:

public enum A implements multilingualA{
    A("a"),
    B("b"),
    C("c"),
    D("d");
    ...}


BIG阳
浏览 816回答 3
3回答

UYOU

如果您想确保所有项目都不包含在exclusions您可以执行的操作中:public&nbsp;static&nbsp;List<A>&nbsp;getValuesExclusion(AType...&nbsp;exclusions){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Arrays.stream(values()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(e&nbsp;->&nbsp;Arrays.stream(exclusions).noneMatch(c&nbsp;->&nbsp;c&nbsp;==&nbsp;e)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());}这将创造一个Stream的exclusions再利用noneMatch(),以确保给定的AType是不包括在Array

绝地无双

您应该重新考虑是否List真的是包含唯一元素的适当数据类型。一个Set通常是比较合适的。然后,如果您关心性能,可以将其实现为public&nbsp;static&nbsp;Set<A>&nbsp;getValuesExclusion(A...&nbsp;exclusions){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;exclusions.length&nbsp;==&nbsp;0?&nbsp;EnumSet.allOf(A.class): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumSet.complementOf(EnumSet.of(exclusions[0],&nbsp;exclusions));}该类EnumSet专门用于保存enum类型的元素,只为每个常量存储一个位,以判断它是否存在。这允许像complementOf只使用单个⟨binarynot⟩操作翻转所有位的操作,而不需要实际遍历enum常量。如果你坚持要回来List,你可以这样做public&nbsp;static&nbsp;List<A>&nbsp;getValuesExclusion(A...&nbsp;exclusions){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;ArrayList<>(exclusions.length&nbsp;==&nbsp;0?&nbsp;EnumSet.allOf(A.class): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumSet.complementOf(EnumSet.of(exclusions[0],&nbsp;exclusions)));}

慕少森

我不会Stream在这里使用s,而是使用(imho)更具可读性的方法:public&nbsp;static&nbsp;List<A>&nbsp;getValuesExclusion(AType...&nbsp;exclusions){ &nbsp;&nbsp;&nbsp;&nbsp;List<A>&nbsp;values&nbsp;=&nbsp;Arrays.asList(values()); &nbsp;&nbsp;&nbsp;&nbsp;values.removeAll(Arrays.asList(ex)); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;values;}
随时随地看视频慕课网APP

相关分类

Java
我要回答