2017-11-14 3 views
3

リストからオブジェクトを返す簡単な方法はありますか?ループ中にリストからオブジェクトを戻すjava 8

例:

public enum CarType { 
    TOYOTA, 
    NISSAN, 
    UNKNOWN; 

    public static CarType getByName(String name) { 
     for (CarType carType : values()) { 
      if (carType.name().equals(name)) { 
       return carType; 
      } 
     } 
     return UNKNOWN; 
    } 
} 

方法以下のjava 8によって、いくつかの別の方法のサポートがあり、ループのために私が使用しています。

public static CarType getByName(String name) { 
    for (CarType carType : values()) { 
     if (carType.name().equals(name)) { 
      return carType; 
     } 
    } 
    return UNKNOWN; 
} 
+3

なぜあなたは二度 ''のgetByName(String)を掲載しましたか?私はそれが混乱していると思う。 – c0der

+1

すべての 'Enum'にある' valueOf'メソッドを探していますか?それはJava 8ではありません。 –

+0

OPは 'equals'と' equalsIgnoreCase'が何であるか知っていたと思います。 – nullpointer

答えて

4

findFirstと、このような何かとorElseとして:

return Arrays.stream(values()) 
       .filter(carType -> carType.name().equals(name)) 
       .findFirst().orElse(CarType.UNKNOWN); 
3

あなたはこのようストリームを使用することができます:BTW

public static CarType getByName(String name) { 
    return Arrays.stream(values()) 
      .filter(carType -> carType.name().equals(name)) 
      .findFirst() 
      .orElse(UNKNOWN); 
} 

をIntellliJを使用した場合、(私は彼らに加盟していないです;))、この変換を自動的に行うオプションが用意されています。

3

別のオプション

enum CarType { 
    TOYOTA, NISSAN, UNKNOWN; 

    public static CarType getByName(String name) { 
     return Stream.of(CarType.values()) 
      .filter(x -> x.name().equals(name)) 
      .findFirst() 
      .orElse(UNKNOWN); 
    } 
} 
関連する問題