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