Java 从列表中查找小写字母数最多的字符串<;字符串>;。(使用流)

Java 从列表中查找小写字母数最多的字符串<;字符串>;。(使用流),java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,我做过这样的事情: List<String> strList = asList("getElementById", "htmlSpecialChars", "httpRequest"); String maxOfLowercase = strList.stream() .max((o1, o2) -> { long lowerCount1 = o1.chars().filter(Character::isLowerCase

我做过这样的事情:

List<String> strList = asList("getElementById", "htmlSpecialChars", "httpRequest");
String maxOfLowercase = strList.stream()
            .max((o1, o2) -> {
                long lowerCount1 = o1.chars().filter(Character::isLowerCase).count();
                long lowerCount2 = o2.chars().filter(Character::isLowerCase).count();
                return Long.compare(lowerCount1, lowerCount2);
            }).get();
List strList=asList(“getElementById”、“htmlSpecialChars”、“httpRequest”);
字符串maxOfLowercase=strList.stream()
.最大值((o1,o2)->{
long lowerCount1=o1.chars().filter(Character::isLowerCase.count();
long lowerCount2=o2.chars().filter(Character::isLowerCase.count();
返回Long.compare(lowerCount1,lowerCount2);
}).get();

但是我认为可以让这更容易,不是吗?

更容易/更简短是为了品味,但你可以这样写

import static java.util.stream.Collectors.*;

List<String> maxOfLowercase = strList.stream()
                      .collect(groupingBy(s -> s.replaceAll("[^a-z]", "").length(),
                                                          TreeMap::new, toList()))
                      .lastEntry().getValue();

比较器
界面中有一些方便的静态方法,可以帮助您缩短代码:

String maxOfLowercase = strList.stream()
        .max(Comparator.comparingLong(o -> o.chars().filter(Character::isLowerCase).count()))
        .get();
String maxOfLowercase = strList.stream()
        .max(Comparator.comparingLong(o -> o.chars().filter(Character::isLowerCase).count()))
        .get();