hotmeatballsoup:
ここではJavaの8。私は、文字列のためのPOJOの二つのリストを検索する必要があり、正しくストリーム/オプションのAPIを使用します。
名前は、最初のリストに表示されている場合(」lunches
「)、私はそれを含むオプションを返すようにしたいです。名前は、第二のリスト(」に表示されている場合エルス、dinners
「)その後、私はそれを含むオプション返すようにしたいです。そうでなければ私は返すようにしたいOptional.empty()
名前がどちらのリストに存在しない場合。これまでの私の最高の試み:
public class Restaurant {
private String id;
private String name;
private List<Food> lunches;
private List<Food> dinners;
public Optional<Food> findFoodByName(String name) {
return Optional.of(lunches.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst())
.orElse(dinners.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst());
// .orElse(null); TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?
}
}
誰の助けが私はここでフィニッシュラインを通過することはできますか?
デッドプール :
使用してリストの両方を組み合わせるStream.of
と、要素やリターンをチェックしますOptional.empty()
Stream.of(lunches, dinners)
.flatMap(List::stream)
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();
@Holgerからの提案につきとして使うこともできStream.concat
連結する2つのストリームを、その後の要素をチェック
Stream.concat(lunches.stream(), dinners.stream())
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();