Jvdeveloper:
私は列挙型を持っていると仮定すると、
enum Country {
China,
USA,
Others
}
セイ私が持っているlist1 = ["China", "Shanghai", "Beijing"]
とのチェックをisChina
trueの場合、その後、Country.Chinaを返し、。
list2 = ["USA", "Dallas", "Seattle"]
用と方法の確認isUSA
、その後Country.USAを返すtrueの場合、。
米国や中国は、リストから欠落している場合は、Country.Othersを返します。
仮定:リストは常にその国の都市が続くだけで1国が含まれています。
[編集]国が配列の最初の要素となり、想定していません。
私は、Java-7に実装するのは非常に簡単にそれを見つけることが、私がいないことを確認、この使用してストリームを行うには、最もエレガントな方法をしています
for (String str: list) {
if (str.equals("China")) {
return Country.China
}
if (str.equals("USA")) {
return Country.USA;
}
}
return Country.Other;
私は、Streamsを使用してクリーンな実装を探しています。
Ousmane D .:
使用filter
条件のための操作をしてfindFirst
、それぞれに変換し、その後、最初のマッチを取得するCountry.China
か、Country.USA
そうでない場合は返却Country.Others
一致していないがあった場合。
return list.stream()
.filter(str -> "China".equals(str) || "USA".equals(str))
.findFirst()
.map(s -> "China".equals(s) ? Country.China : Country.USA)
.orElse(Country.Others);
代わりに:
return Stream.of(Country.values()) // or Arrays.stream(Country.values())
.filter(o -> list.contains(o.toString()))
.findFirst().orElse(Country.Others);
最初のソリューションは、常にあなたの不可欠なアプローチの、完全に同等である「USA」をチェックする前に、「中国」をチェックします、しかし、後者は常にその順序を尊重していない、むしろそれはでenum定数の宣言の順序に依存しますCountry
。