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

Car*_*hez 0 java iteration enums loops arraylist

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

List<ObjectEnum> oList= new ArrayList<ObjectEnum>();
Collections.addAll(itinerarySortPriceCriteriaList,ItinerarySortPriceCriteria.values());
oList.remove(ObjectEnum.UNWANTED_ENUM_VALUE);
Run Code Online (Sandbox Code Playgroud)

然后迭代该列表并使用每个循环的公共对象进行操作.

我正在考虑的另一种方法是迭代所有ObjectEnum值并使用if跳过对我不想采取行动的行为,如下所示:

for (ObjectEnum o: ObjectEnum.values()) {
    if(!o.equals(ObjectEnum.UNWANTED_ENUM_VALUE)) {
       doThings();
    }
}
Run Code Online (Sandbox Code Playgroud)

你看到它们中的任何一个有什么优点,哪一个你觉得更具可读性?谢谢.

这是针对Java6每天生产20MM的请求.

JB *_*zet 5

您的第一个代码将无法正常工作,因为您可能无法从返回的列表中删除任何内容Arrays.asList().您需要一个新的ArrayList.

你的第二个代码很好,但可能更清楚.

你可以使用EnumSet:

for (ObjectEnum o : EnumSet.complementOf(EnumSet.of(ObjectEnum.UNWANTED_ENUM_VALUE))) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或流:

Arrays.stream(ObjectEnum.values())
      .filter(o -> !o.equals(ObjectEnum.UNWANTED_ENUM_VALUE))
      .forEachOrdered(...);
Run Code Online (Sandbox Code Playgroud)

坦率地说,这并不重要,所有解决方案都是可读的,IMO.

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