Javaでのストリームを使用して、文字列のリストで最大の長さをどのように見つけますか?

デビッド・スミス:

私は以下のようなクラスを持っています:

public class A
{
    String name;
    String getName(){return name;}
}

そして、私はまた、以下のようなリストを持っています:

List<A> list_a = new ArrayList<>();
//add n objects into list_a

今、私はJavaでストリームを使用してlist_aにあるオブジェクトの最大長さを見つけるしたいと思います。私は以下のようなコードを作成しました:

final int max_len = list_a.stream().max(Comparator.comparingInt(A::getName::length));

しかし、それは動作しません、私はそれが構文で何か悪い意味します。あなたはこれで私を助けてもらえますか?ありがとうございました。

Pshemo:

あなたが使用していることではありませんラムダラムダは次のようになります(arguments) -> action何をしているのA::getNameであるメソッド参照が、追加は、::lengthその構文の一部ではありません。

代わりにA::getName::length、あなたは次のようにラムダを使用することができますa -> a.getName().length()

しかし、あなたのコードは、また別の問題があります。コード

list_a.stream()
      .max(Comparator.comparingInt(A::getName::length));

ストリーム処理しているAと、max上と呼ばれる方法がStream<A>になりますOptional<A>ではありませんintそれはOptionalチャンスがあるので、list_a有効な結果がないことを意味して空にすることができますが。

あなたがOptionalIntを取得したい場合は、必要があるだろうmap Stream<A>Stream<String>、その後、mapそれへのStream of int最初の。そして、あなたはその呼び出すことができるmax()方法をしてもらいます。

OptionalInt maxOpt  = list_a.stream()
                            .map(A::getName)
                            .mapToInt(String::length)
                            .max();

あなたが既に持っている場合はOptionalInt、あなたがそこにあれば値を確認するためにそれを使用することができますisPresent()を介してそれを得ますgetAsInt()また、使用することができますorElse(defaultValueIfEmpty)ように

int max = maxOpt.orElse(-1); //will return value held by maxOpt, or -1 if there is no value

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=199056&siteId=1
おすすめ