Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代所有列表但只有一个特定值的最佳方法_Java_Loops_Arraylist_Enums_Iteration - Fatal编程技术网

Java 迭代所有列表但只有一个特定值的最佳方法

Java 迭代所有列表但只有一个特定值的最佳方法,java,loops,arraylist,enums,iteration,Java,Loops,Arraylist,Enums,Iteration,我有一个枚举,我可以使用enum.values()从中获取值,我需要遍历它们并对除一个值以外的所有值执行操作,我正在考虑两种避免对这些值执行操作的方法。 第一种方法是创建一个值列表并删除我不需要的值,如下所示: List<ObjectEnum> oList= new ArrayList<ObjectEnum>(); Collections.addAll(itinerarySortPriceCriteriaList,ItinerarySortPriceCriteria.va

我有一个枚举,我可以使用enum.values()从中获取值,我需要遍历它们并对除一个值以外的所有值执行操作,我正在考虑两种避免对这些值执行操作的方法。 第一种方法是创建一个值列表并删除我不需要的值,如下所示:

List<ObjectEnum> oList= new ArrayList<ObjectEnum>();
Collections.addAll(itinerarySortPriceCriteriaList,ItinerarySortPriceCriteria.values());
oList.remove(ObjectEnum.UNWANTED_ENUM_VALUE);
你认为这两种方法都有什么优点吗?你觉得哪一种更具可读性?谢谢


这适用于每天20毫米的Java6生产请求。

您的第一个代码不起作用,因为您可能无法从数组.asList()返回的列表中删除任何内容。你需要一个新的ArrayList

您的第二个代码很好,但可能更清晰

您可以使用枚举集:

for (ObjectEnum o : EnumSet.complementOf(EnumSet.of(ObjectEnum.UNWANTED_ENUM_VALUE))) {
    ...
}
或溪流:

Arrays.stream(ObjectEnum.values())
      .filter(o -> !o.equals(ObjectEnum.UNWANTED_ENUM_VALUE))
      .forEachOrdered(...);
坦白地说,这并不重要,所有的解决方案都是可读的


基于列表或基于枚举集的解决方案的优点是,如果需要在此筛选的集合上迭代多次,可以将筛选的列表/集合存储到字段中。

您的第一个代码不起作用,因为您可能无法从数组返回的列表中删除任何内容。asList()。你需要一个新的ArrayList

您的第二个代码很好,但可能更清晰

您可以使用枚举集:

for (ObjectEnum o : EnumSet.complementOf(EnumSet.of(ObjectEnum.UNWANTED_ENUM_VALUE))) {
    ...
}
或溪流:

Arrays.stream(ObjectEnum.values())
      .filter(o -> !o.equals(ObjectEnum.UNWANTED_ENUM_VALUE))
      .forEachOrdered(...);
坦白地说,这并不重要,所有的解决方案都是可读的


基于列表或基于枚举集的解决方案的优点是,如果需要在此筛选的集合上迭代多次,则可以将筛选的列表/集合存储到字段中。

如果列表不会更改,则最好将其保存在枚举中,并在需要的任何地方调用:

public enum ObjectEnum {    
    A, B, C;

    public static final List<ObjectEnum> ALL_BUT_C =  unmodifiableList(asList(A, B));

}
public enum ObjectEnum{
A、 B,C;
公共静态最终列表ALL_,但_C=不可修改列表(asList(A,B));
}

如果您的列表不会更改,那么最好将其保存在enum中,并在需要的任何地方调用:

public enum ObjectEnum {    
    A, B, C;

    public static final List<ObjectEnum> ALL_BUT_C =  unmodifiableList(asList(A, B));

}
public enum ObjectEnum{
A、 B,C;
公共静态最终列表ALL_,但_C=不可修改列表(asList(A,B));
}

因为你写得比我快+1。我会选择“流”解决方案。回答不错。我必须同意@Kh.Taheri的观点,即流式选择更为优越。在.filter()方法中包含区分代码更清晰,流代码更易于阅读和快速理解。我相信流是在Java8中引入的,而这个项目是在Java6中引入的,让我将其添加到描述中。因为您编写它的速度比我+1快。我会选择“流”解决方案。回答不错。我必须同意@Kh.Taheri的观点,即流式选择更为优越。在.filter()方法中包含区分代码更清晰,流代码更易于阅读和快速理解。我相信流是在Java8中引入的,而这个项目是在Java6中引入的,让我将其添加到描述中。这是一个很好的方法,但我无法编辑枚举,因为它来自另一种很好的方法,但我无法编辑枚举,因为它来自另一个API