基于实现 Comparator 或 ToIntFunction、Java 8 的流排序、反转绝对值
Posted
技术标签:
【中文标题】基于实现 Comparator 或 ToIntFunction、Java 8 的流排序、反转绝对值【英文标题】:Stream Sorted, Reversed Absolute Value based on , implementing Comparator or ToIntFunction, Java 8 【发布时间】:2020-05-17 19:10:01 【问题描述】:我用
排序someList.sorted(Comparator.comparingInt(someClass::getValue).reversed())
现在,我需要像这个答案一样按绝对值排序:abs_number = (number < 0) ? -number : number;
(不使用 )Math.abs(x)
或 Math.sqrt(Math.pow(x, 2))
如何实现一个新的java.util.Comparator
或java.util.function.ToIntFunction
,按AbsoluteValue倒序排列?
【问题讨论】:
为什么不使用abs
?直接的解决方案是someList.sorted(Comparator.comparingInt(v -> Math.abs(v.getValue())).reversed());
,但如果你坚持不使用abs
,那么就使用someList.sorted(Comparator.comparingInt(v -> v.getValue() < 0? -v.getValue(): v.getValue())).reversed());
在hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/…和这里github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/…中实现abs的方法相同
【参考方案1】:
查看Question:
someList
.sorted((a, b) ->
Integer.valueOf(b.getValue() < 0 ? -b.getValue() : b.getValue())
.compareTo(a.getValue() < 0 ? -a.getValue() : a.getValue())
)
根据Math.abs(x)
中的implementation 是您需要的相同代码。
someList
.sorted((a, b) ->
Integer.valueOf(Math.abs(b.getValue()))
.compareTo(Math.abs(a.getValue()))
)
或者
someList
.sorted(Comparator.<SomeClass>comparingInt(s -> Math.abs(s.getValue())).reversed())
【讨论】:
以上是关于基于实现 Comparator 或 ToIntFunction、Java 8 的流排序、反转绝对值的主要内容,如果未能解决你的问题,请参考以下文章