簡體   English   中英

從List中查找具有最大小寫字母數的String <String> 。 (使用流)

[英]Find the String with the largest number of lowercase letters from a List<String>. (Using streams)

我做過這樣的事情:

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();

但我認為有可能讓這更容易\\射手,不是嗎?

Comparator界面中有方便的靜態方法,可以幫助您縮短代碼:

String maxOfLowercase = strList.stream()
        .max(Comparator.comparingLong(o -> o.chars().filter(Character::isLowerCase).count()))
        .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();

一個優點是,如果它們具有相同數量的小寫字符,它將為您提供多個單詞。 這只會過濾每個單詞一次,而不是每次比較一次。

如果您想支持所有小寫字符,可以使用正則表達式

"[^\\p{javaLowerCase}]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM