分割して解説します
s.chars() // ①
.filter(ch -> ch > 'm') // ②
.count(); // ③
① s.chars()
s.chars()
は、引数で渡されているStringのsを、intStreamに変換しています。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/CharSequence.html#chars--
※ streamとは、便利に扱える配列のようなものです(詳しい使い方は検索してみてください)
※ charは16bitの文字であるため、intに変換することが可能です
② .filter(ch -> ch > 'm')
①で作成したintStreamを.filter(ch -> ch > 'm')
で、a-m以外の文字で構成されたintStreamに変換しています
※ filter
の動作は、中の式がtrue
である新たなintStreamを作成します
質問の例の場合、②の時点で(ch > 'm')
がtrue
のintStreamが作成されています
filterの中身はlambda式という特殊な式が用いられています
これは(引数 -> 式)
という形式で、引数にintStreamの要素が1つずつ渡されて処理されます
詳しくはlambda式 java
等で検索してみてください
③ .count();
intStreamの要素を数えます。
要素は②でフィルタリングされたものなので、sのa-m以外の文字の数となります
(ch > 'm')が成立する理由
これは文字コードの順番を利用した式です、
https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF
数字→英大文字→英小文字の順に並んでいるので、質問された処理は記号や日本語は考えられていない処理と言えるでしょう
その文字が16進数だと何なのかは、以下の処理で確認することができます
System.out.println(Integer.toHexString((int) 'a'));
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。