どのようにJavaの-8 anymatchにマッチした要素を知っていますか?

Jvdeveloper:

私は列挙型を持っていると仮定すると、

enum Country {
    China, 
    USA, 
    Others
}

セイ私が持っているlist1 = ["China", "Shanghai", "Beijing"]とのチェックをisChinatrueの場合、その後、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

おすすめ

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