2016-09-26 19 views
0

Java 8でこのタイプのコードを書くには?私はストリームを使用してJava8でこれを記述したい。これにはどんな方法がありますか?Java 8のリストから最初の要素を見つける

List<SomeDTO> someDTOList = sample.getSomeDTO(); 
int a=0; 
for(SomeDTO sample : someDTOList ){ 
    String someElement = sample .getSomeElement(); 
    if(someElement.equals("Condition1"){ 
     a=1; 
     break; 
    } 
    if(someElement.equals("Condition2"){ 
     a=2; 
     break; 
    } 
    if(someElement.equals("Condition3"){ 
     a=3; 
     break; 
    } 
} 
+1

サンプルは何ですか? whastは機能していませんか?あなたの質問を詳細に説明してください – proton

+2

他の人にあなたの任務を依頼するのではなく、自分で書いてみて、実際の問題に遭遇したらここに尋ねてみてください。 – andrel

答えて

2

あなたはmapmapToIntfilterfindFirstの組み合わせでそれを行うことができますが、それはとてもきれいではありません。

int a = 
    sample.getSomeDTO() 
      .stream() 
      .map(SomeDTO::getSomeElement) 
      .mapToInt(e -> { 
       if (e.equals("Condition1")) 
        return 1; 
       else if (e.equals("Condition2")) 
        return 2; 
       else if (e.equals("Condition3")) 
        return 3; 
       else 
        return 0; 
      }) 
      .filter(a -> a > 0) 
      .findFirst() 
      .orElse(0); 

ホルガーは、あなたがすることによって、それはあまり醜い作ることができ、示唆したようにif文を三項条件式に置き換える:

int a = 
    sample.getSomeDTO() 
      .stream() 
      .map(SomeDTO::getSomeElement) 
      .mapToInt(e -> e.equals("Condition1") ? 1 : e.equals("Condition2") ? 2 : e.equals("Condition3") ? 3 : 0) 
      .filter(a -> a > 0) 
      .findFirst() 
      .orElse(0); 
+0

'.mapToInt(e-> e.equals(" Condition1 ")?1:e.equals(" Condition2 ")?2:e.equals(" Condition3 ")?3:0)' – Holger

+0

@Holgerもっと良い: ) – Eran

関連する問題