2017-12-08 15 views
2

ギフトリストから最大数の小文字の文字列を見つける必要があります。java 8の小文字の最大数を含む文字列を見つけよう

これは私が現在

public static void main(String[] args) { 

     List<String> list = new ArrayList<>(); 

     list.add("Strig a with ABDD"); 
     list.add("STR dfd BC dsff"); 

     OptionalLong max = list.stream().map(s->countLowerCase(s)).mapToLong(i->Long.valueOf(i)).max(); 
     System.out.println(max); 

    } 


    private static long countLowerCase(String inputString) { 
     return inputString.chars().filter((s)->Character.isLowerCase(s)).count(); 
    } 

をやっていることは、これを行うのいずれかのより良い方法がある方法ですか?

答えて

0

です。

List<String> list = Arrays.asList("Strig a with ABDD", "STR dfd BC dsff"); 

    list.stream() 
     .mapToLong(s -> s.chars().filter(Character::isLowerCase).count()) 
     .max() 
     .ifPresent(System.out::println); 

何の簡単な方法はありません。あなたが最初の場所でlong返す関数でmapToLongを使用することができるようmapmapToLongが続きます。あなたが本当にではなく、数だけ「最大小文字の数の文字列」を取得するためにワン場合は、使用することができます。

これは下の最大数の文字列であるとして、 Strig a with ABDDが印刷されます
list.stream() 
    .max(Comparator.comparingLong(s -> s.chars().filter(Character::isLowerCase).count())) 
    .ifPresent(System.out::println); 

をあなたのリストの大文字と小文字

1

Stream APIを使用して、私はそれをやる方がやや簡単だと思います。

list.stream() 
      .flatMap(s -> Stream.of(s.chars() 
        .filter(Character::isLowerCase) 
        .count())) 
      .max(Comparator.naturalOrder()) 
      .ifPresent(System.out::println); 

それとも明らかはるかに簡単な解決策:

long max = list.stream() 
      .mapToLong(s -> s.chars().filter(Character::isLowerCase).count()) 
      .max() 
      .getAsLong(); 
+0

なぜ、 '.flatMap(s - > Stream.of(expression)) 'が、より簡単であると思いますか? '.map(s - > expression)'?同様に、 'mapToLong(...).max()'は 'map(...).max(Comparator.naturalOrder())'よりも簡単に見えます。つまり、OPは以前の回答よりも簡単な解決法... – Holger

+0

@Holgerは完全に私の悪いです、あなたは正しいです – Eugene

1

はい、あなたは上記のコードを少し短くするのを助けることができるComparatorインターフェイスの静的メソッドがあります:

System.out.println(list.stream() 
     .max(Comparator.comparingLong(s -> s.chars().filter(Character::isLowerCase).count())).get() 
     .chars().filter(Character::isLowerCase).count()); 

出力は9

+0

結果にこの操作を行うつもりなら、コンパレータがこの比較を繰り返すのは不必要なオーバーヘッドです。自然な比較に続く 'map'はより簡単で効率的ですが、それはOPが既に持っていたものです。 – Holger

関連する問題