2016-10-07 3 views
2

Java8を使用したマップ内で述語を使用するのは、以下より簡潔/簡潔な方法がありますか?述語とjava8のマップ

public static void main(String[] args) { 
     List<Integer> test = new ArrayList<>(); 
     test.add(1); 
     test.add(2); 
     test.add(3); 
     test.add(4); 

     List<Integer> test2 = test.stream() 
      .map(i -> { if (i % 2 == 0) return i; else return 0;}) 
      .collect(toList()); 

     for (int i = 0; i < test2.size(); i++) 
     { 
      System.out.println(test2.get(i)); 
     } 
    } 

Output: 
0 
2 
0 
4 

本質的には、テストリストのメンバーが変わった場合にのみ変換したいと思っています。

+0

あなたは何も変換していません。 – shmosel

+0

私はテストリスト0のすべての奇数を作っています。 –

+0

ね。しかし、あなたは偶数を変えようとしています。 – shmosel

答えて

2

あなたのコードの簡潔版:

List<Integer> test = new ArrayList<>(Arrays.asList(1, 2, 3, 4)); 

List<Integer> test2 = test.stream() 
          .map(i -> i % 2 == 0 ? i : 0) 
          .collect(toList()); 
test2.forEach(System.out::println); 
+5

I forEachメソッドを使用するためにリストのストリームを取得する必要はないと考えてください。 test2.forEach(System.out :: println);うまくいくはずです。 – Brion

1

この1?

IntStream.rangeClosed(1, 4).map(i -> i % 2 == 0 ? i : 0).forEach(System.out::println); 

それとも、ストリームにのみ偶数をしたい場合(例えば2から開始)なぜこの1?

IntStream.iterate(2, i -> i + 2).limit(2).forEach(System.out::println);