Hil*_*kus 28 java java-8 java-stream
我有一种感觉,我在这里遗漏了一些东西.我发现自己做了以下事情
private static int getHighestValue(Map<Character, Integer> countMap) {
return countMap.values().stream().mapToInt(Integer::intValue).max().getAsInt();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是从愚蠢的转换Stream到 IntStream通过mapToInt(Integer::intValue)
有没有更好的转换方式?这一切都是为了避免使用max()从Stream,这需要传递一个Comparator但问题是专门对的皈依Stream到IntStream
Hol*_*ger 11
由于类型擦除,Stream实现不了解其元素的类型,也不能为您提供简化max操作或转换为IntStream方法.
在这两种情况下,它分别需要一个函数a Comparator或a ToIntFunction来使用Stream元素的未知引用类型来执行操作.
您要执行的操作的最简单形式是
return countMap.values().stream().max(Comparator.naturalOrder()).get();
Run Code Online (Sandbox Code Playgroud)
鉴于自然顺序比较器被实现为单例.所以它是唯一的比较器,如果有任何优化,它提供了被Stream实现识别的机会Comparable元素进行.如果没有这样的优化,由于其单独特性,它仍然是具有最低内存占用的变体.
如果你坚持这样的一个转换Stream到IntStream没有办法周围设置ToIntFunction并有一个没有预定义的单Number::intValue一种功能,因此使用Integer::intValue已经是最好的选择.您可以i->i改为编写,这样更短但只是隐藏了拆箱操作.
Tod*_*odd 10
我意识到你正试图避免使用比较器,但你可以通过参考以下内容来使用内置功能Integer.compareTo:
private static int getHighestValue(Map<Character, Integer> countMap) {
return countMap.values().stream().max(Integer::compareTo).get();
}
Run Code Online (Sandbox Code Playgroud)
或者@fge建议,使用::compare:
private static int getHighestValue(Map<Character, Integer> countMap) {
return countMap.values().stream().max(Integer::compare).get();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11560 次 |
| 最近记录: |