JavaストリームAPI。1行にオブジェクトのマッチング述語のフィールドを検索します。存在していない場合は、いくつかのデフォルト値を返します。

scenotaph:

例えば、我々はいくつかのフィールドを持つ単純なクラスを持っています。我々は「名前」と「ID」と呼ばれるフィールドを持っている、と仮定しましょう。そして、私はそのようなオブジェクトが存在しない場合は、指定されたIDを持つオブジェクトの名前を取得し、いくつかDEFAULTNAMEを返すようにしたいです:

private List<MyObject> myObjects;
public String findFieldById(int id) {
    MyObject matchingObj = myObjects.stream()
                    .filter(m -> m.getId() == id)
                    .findFirst().orElse(null);

    return (matchingObj == null) ? "defaultName" : matchingObj.getName();
}

私の質問は、私は簡単にはnullで、このチェックを行うことができる方法である1つのラインの流れの中

Ousmane D .:

あなたはへのマッピングによって1つのパイプラインにこのタイプの動作を実行することができMyObject::getNameた後、findFirstそれ以外を経由して、デフォルト値を提供しますorElse

return myObjects.stream()
         .filter(m -> m.getId() == id)
         .findFirst()
         .map(MyObject::getName)
         .orElse("defaultName");

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177524&siteId=1