2016-08-02 2 views
-1

Я пытаюсь написать следующий код, используя потокиПерепишите еще, если в одном потоке Java 8

public static void main(String[] args) { 
     List<String> l = new ArrayList<String>(); 
     l.add("pavan"); 
     l.add("kumar"); 
     l.add("rajesh"); 

     for(String s : l){ 
      if(s.contains("pavan")){ 
       methodA(); 
      }else if (s.contains("kumar")){ 
       methodB(); 
      }else{ 
       System.out.println("C"); 
      } 
     } 
    } 
} 

Я попытался следующие, используя потоки

public static void main(String[] args) { 
     List<String> l = new ArrayList<String>(); 
     l.add("pavan"); 
     l.add("kumar"); 
     l.add("rajesh"); 
     l.stream(). 
     filter(s->s.contains("pavan")). 
     findAny().map(s->methodB()).filter(s->s.contains("kumar")).map(s->methodC()). 
     orElse(methodA()); 
    } 

Приведенный выше код никогда не исполняющих methodC().

Может ли кто-нибудь переписать его в одном потоке Java 8?

+2

Как только вы назвали 'фильтр (s-> s.contains ("Павана"))', то есть только результаты, где значение содержит Павана в потоке. Это совершенно другой процесс ... Я не вижу смысла пытаться использовать поток здесь, он не предназначен для замены выражений else. –

+0

Я понял это. Но как я могу написать код в lambda – pppavan

+1

Если вы действительно хотите использовать потоки .... 3 шага: 'l.stream(). Filter (s -> s.contains (" pavan ")) .forEach (s -> methodA()); ' ' l.stream(). filter (s -> s.contains ("kumar")). forEach (s -> methodB()); ' 'l.stream(). filter (s ->! s.contains (" pavan ") &&! s.contains (" kumar ")). forEach (s -> methodC());' –

ответ

1

Вы могли бы просто использовать Foreach:

l.stream().forEach(s -> { 
     if (s.contains("pavan")) { 
      methodA(); 
     } else if (s.contains("kumar")) { 
      methodB(); 
     } else { 
      methodC(); 
     } 
    }); 
Смежные вопросы