java - Java 8 流中的 arg 最大值?

标签 java java-8 java-stream argmax

根据产生 double 或整型值的标准的最大化,我经常需要集合的最大元素。 Streams 有 max() 函数,它需要我实现一个比较器,我觉得这很麻烦。有没有更简洁的语法,比如下面例子中的names.stream().argmax(String::length)

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class ArgMax
{
    public static void main(String[] args)
    {
        List<String> names = Arrays.asList("John","Joe","Marilyn");
        String longestName = names.stream().max((String s,String t)->(Integer.compare(s.length(),t.length()))).get();
        System.out.println(longestName);
    }
}

最佳答案

使用

String longestName = names.stream().max(Comparator.comparing(String::length)).get();

比较某些属性上的元素(可能比这更复杂,但不是必须的)。

As Brian suggests in the comments ,如果 Stream 有可能为空,则像这样使用 Optional#get() 是不安全的。您最好使用一种更安全的检索方法,例如 Optional#orElse(Object)如果没有最大值,它会给你一些默认值。

关于java - Java 8 流中的 arg 最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606185/

相关文章:

java - 如何在流迭代期间使用丰富(外部)调用?

java - 我将如何使用 Java 8 和 lambda 打印 JVM 的系统属性?

forEach 循环期间的 java8 java.util.ConcurrentModificationException

java - 如何为 @Inheritance JPA 注释指定不同的列

java - 从 LDAP 获取当前用户的所有组和角色

java - Java 8 中非 String(非 int/long)对象的实习

java - 使用 aspectj-maven-plugin 为 java 8 编织 Spring + AspectJ

java - Java中无限并行流图减少有时间限制的管道

java客户端应用程序 session 恢复

java - 该程序的 if else 语句有什么问题?