为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2019-05-03 17:15:19
我有以下方法: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");     ...}
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

如果您想确保所有项目都不包含在exclusions您可以执行的操作中:

public static List<A> getValuesExclusion(AType... exclusions){
        return Arrays.stream(values())
                .filter(e -> Arrays.stream(exclusions).noneMatch(c -> c == e))
                .collect(Collectors.toList());}

这将创造一个Streamexclusions再利用noneMatch(),以确保给定的AType是不包括在Array


查看完整回答
反对 回复 2019-05-15
?
绝地无双

TA贡献1946条经验 获得超4个赞

您应该重新考虑是否List真的是包含唯一元素的适当数据类型。一个Set通常是比较合适的。

然后,如果您关心性能,可以将其实现为

public static Set<A> getValuesExclusion(A... exclusions){
    return exclusions.length == 0? EnumSet.allOf(A.class):
        EnumSet.complementOf(EnumSet.of(exclusions[0], exclusions));}

该类EnumSet专门用于保存enum类型的元素,只为每个常量存储一个位,以判断它是否存在。这允许像complementOf只使用单个⟨binarynot⟩操作翻转所有位的操作,而不需要实际遍历enum常量。

如果你坚持要回来List,你可以这样做

public static List<A> getValuesExclusion(A... exclusions){
    return new ArrayList<>(exclusions.length == 0? EnumSet.allOf(A.class):
        EnumSet.complementOf(EnumSet.of(exclusions[0], exclusions)));}


查看完整回答
反对 回复 2019-05-15
?
慕少森

TA贡献2019条经验 获得超9个赞

我不会Stream在这里使用s,而是使用(imho)更具可读性的方法:

public static List<A> getValuesExclusion(AType... exclusions){
    List<A> values = Arrays.asList(values());
    values.removeAll(Arrays.asList(ex));
    return values;}


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 815 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信