我可以以某种方式从java中的Collections.Min / Collections.Max中排除或过滤掉一个值吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以以某种方式从java中的Collections.Min / Collections.Max中排除或过滤掉一个值吗?相关的知识,希望对你有一定的参考价值。

所以我使用Collections.min在ArrayList中查找一个对象,该对象包含其中一个元素中的最小整数值。基本上比较列表中的每个元素。

现在,列表中有一些对象不包含值,因此我必须将它们设置为-1。

如何排除列表中int值为-1的所有元素,我不知道如何应用if语句。

temp = Collections.min(PollutionDatasetList, Comparator.comparingInt(Measurement::getLevel));

PollutionDatesetList - 我的清单

测量 - 我的课程包含在列表中

GetLevel - 我正在比较的整数值。

答案

只需使用流API:

 list.stream()
     .filter(m -> m.getLevel() >= 0)
     .min(Comparator.comparingInt(Measurement::getLevel))

getLevel()更好的回归类型是OptionalInt。这将迫使每个处理级别的代码考虑测量没有级别的情况,从而避免错误。

另一答案

由于您使用Collections.min找到了最小值,因此将没有值的对象的值设置为某个大数而不是-1表示Integer.MAX_VALUE,这样就不会再造成任何问题。我不确定这个更改是否会对程序的其他模块造成任何问题,但它肯定会解决这个问题的Collections.min。

以上是关于我可以以某种方式从java中的Collections.Min / Collections.Max中排除或过滤掉一个值吗?的主要内容,如果未能解决你的问题,请参考以下文章

按索引从 Collection 中获取价值的最佳方式

如何以较少的费用从 java 中的方法返回两个值(1.Collection,2.Single Boolean 值)?

Java中的Set集合

java 语言里 遍历 collection 的方式

接口Set

Java进阶--Set接口