アップデートセット<人>の人が存在する場合、彼らがいない場合、またはそれらを追加

MeanwhileInHell:

のは、私が名前とアドレスが含まれている非常に単純なクラス、人を、持っているとしましょう:

public class Person {
    String name;
    String address;

    public Person(final String name,
                  final String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(final String newName) {
        this.name = newName;
    }

    public String address() {
        return address;
    }

    public void setAddress(final String newAddress) {
        this.address = newAddress;
    }
}

私は、現在知られているPersonオブジェクトのすべてを含むセットを持っている、と私は自分の名前に基づいて人物のうちの1つのアドレスを更新します。私は、次のを持っていることを示します。

persons.stream()
       .filter(person -> personToUpdate.getName().equalsIgnoreCase(person.getName()))
       .forEach(person -> {
                person.setAddress(personToUpdate.getAddress());
        });

私は設定していない全く新しい人を持っている場合しかし、私の問題があります。どのように私は、人が存在するかどうかの設定をチェックし、もしそうなら、自分のアドレスを更新します。彼らが存在しない場合でも、リストに追加します。私は、これは簡単です知っているが、何らかの理由で私はちょうど今、この権利を実現する方法を考えることはできません。私は、彼らはむしろ、できるだけ簡潔なとしてそれを維持したいなどなどなど私のリストにしている場合は、新しい名前を比較し、すべての名前のリストを作成する道を行きたくありません。

EDIT:名前は一意になります!

ernest_k:

あなたはワンライナーを必要としない限り、あなたは、単にのを活用することができOptional、S:

Optional<Person> person = persons.stream()
        .filter(p -> personToUpdate.getName().equalsIgnoreCase(p.getName()))
        .findFirst();

if (person.isPresent()) {
    person.get().setAddress(personToUpdate.getAddress());
} else {
    persons.add(personToUpdate);
}

あなたは、Java 9+を使用している場合、これはさらに良く見ることができます:

persons.stream()
        .filter(p -> personToUpdate.getName().equalsIgnoreCase(p.getName()))
        .findFirst()
        .ifPresentOrElse(
            p -> p.setAddress(personToUpdate.getAddress()),
            () -> persons.add(personToUpdate)
        );

(あなたは一つのエントリを更新することを期待して)もちろんこれは、名前が一意であることを前提としています。

おすすめ

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