根据产生 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/