Java Stream:查找具有属性的最小/最大值的元素

扬·波米卡莱克(JanPomikálek)

我有一个对象流,我想找到一个具有某些属性最大值的对象,该属性的计算成本很高。

作为一个简单的具体示例,假设我们有一个字符串列表,并且希望找到给定coolnessIndex功能的最酷的字符串

以下应该工作:

String coolestString = stringList
        .stream()
        .max((s1, s2) -> Integer.compare(coolnessIndex(s1), coolnessIndex(s2)))
        .orElse(null);

现在,这有两个问题。首先,假设coolnessIndex计算起来很昂贵,这可能不是很有效。我想该max方法将需要重复使用比较器,该比较器又将coolnessIndex重复调用该比较器,最后每个字符串将被多次调用

其次,必须提供比较器会导致代码中有些冗余。我更喜欢这样的语法:

String coolestString = stringList
        .stream()
        .maxByAttribute(s -> coolnessIndex(s))
        .orElse(null);

但是,我无法在StreamAPI中找到匹配的方法这让我感到惊讶,因为按属性查找最小值/最大值似乎是一种常见的模式。我想知道是否有比使用比较器更好的方法(除了for循环)。

扬·波米卡莱克(JanPomikálek)

谢谢大家的建议。最后,我找到了最喜欢的比较器工作效率效率最高的解决方案-来自bayou.io的答案:

有一个通用cache方法:

public static <K,V> Function<K,V> cache(Function<K,V> f, Map<K,V> cache)
{
    return k -> cache.computeIfAbsent(k, f);
}

public static <K,V> Function<K,V> cache(Function<K,V> f)
{
    return cache(f, new IdentityHashMap<>());
}

然后可以按如下方式使用它:

String coolestString = stringList
        .stream()
        .max(Comparator.comparing(cache(CoolUtil::coolnessIndex)))
        .orElse(null);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Java 中查找字符串数组中字符串元素的最大值/最小值

来自分类Dev

具有最小最大值的属性

来自分类Dev

使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

来自分类Dev

在Java 2D数组中查找最大值和最小值

来自分类Dev

使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

来自分类Dev

Java –在数组中查找最小值和最大值

来自分类Dev

需要Java算法的帮助来查找最大值和最小值

来自分类Dev

Java 8查找最大值

来自分类Dev

数组中的Java最小值和最大值

来自分类Dev

在Java中计算最小值和最大值?

来自分类Dev

输入数组java的最小值和最大值?

来自分类Dev

从std :: map查找具有最大值的元素

来自分类Dev

在python中递归查找具有最大值的元素

来自分类Dev

如何强制max返回Java Stream中的所有最大值?

来自分类Dev

Java:方法查找位置而不是数组最大值的值

来自分类Dev

寻找具有最大值属性的元素更快

来自分类Dev

在Java中,如何构造for循环以查找输入的十个值的最大值和最小值。我目前收到此程序未输出的信息

来自分类Dev

使用Java 8获取属性的最大值

来自分类Dev

从具有多个列的.txt文件中查找最大值,最小值

来自分类Dev

从具有多个列的.txt文件中查找最大值,最小值

来自分类Dev

具有XPath的Java硒查找元素

来自分类Dev

具有XPath的Java硒查找元素

来自分类Dev

在Java中查找最小,最大和中间值

来自分类Dev

java int的最大值

来自分类Dev

java int的最大值

来自分类Dev

查找元组中最小元素的最大值

来自分类Dev

查找具有最大值的对象属性,其中属性为小数

来自分类Dev

Java JPA:查找具有多对多属性的实体,其中包含给定集合的每个元素

来自分类Dev

2d数组java中的最小值和最大值

Related 相关文章

  1. 1

    在 Java 中查找字符串数组中字符串元素的最大值/最小值

  2. 2

    具有最小最大值的属性

  3. 3

    使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

  4. 4

    在Java 2D数组中查找最大值和最小值

  5. 5

    使用半已知键在ArrayList的HashMap中查找最大值和最小值-Java

  6. 6

    Java –在数组中查找最小值和最大值

  7. 7

    需要Java算法的帮助来查找最大值和最小值

  8. 8

    Java 8查找最大值

  9. 9

    数组中的Java最小值和最大值

  10. 10

    在Java中计算最小值和最大值?

  11. 11

    输入数组java的最小值和最大值?

  12. 12

    从std :: map查找具有最大值的元素

  13. 13

    在python中递归查找具有最大值的元素

  14. 14

    如何强制max返回Java Stream中的所有最大值?

  15. 15

    Java:方法查找位置而不是数组最大值的值

  16. 16

    寻找具有最大值属性的元素更快

  17. 17

    在Java中,如何构造for循环以查找输入的十个值的最大值和最小值。我目前收到此程序未输出的信息

  18. 18

    使用Java 8获取属性的最大值

  19. 19

    从具有多个列的.txt文件中查找最大值,最小值

  20. 20

    从具有多个列的.txt文件中查找最大值,最小值

  21. 21

    具有XPath的Java硒查找元素

  22. 22

    具有XPath的Java硒查找元素

  23. 23

    在Java中查找最小,最大和中间值

  24. 24

    java int的最大值

  25. 25

    java int的最大值

  26. 26

    查找元组中最小元素的最大值

  27. 27

    查找具有最大值的对象属性,其中属性为小数

  28. 28

    Java JPA:查找具有多对多属性的实体,其中包含给定集合的每个元素

  29. 29

    2d数组java中的最小值和最大值

热门标签

归档