2015-09-25 78 views
1

我正在玩Java 8并尝试使用stream()。我想要实现的是,我有一个列表[1,2,3,4],我想要加倍偶数24,然后返回带有更新值的列表。所以,我会得到[1,4,3,8]。我尝试了以下,但它只返回[4,8]修改列表的一部分,然后返回更新列表

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

    myList = myList 
    .stream() 
    .filter(n -> n%2==0) 
    .map(n -> n*2) 
    .collect(Collectors.toList()); 

    System.out.println(myList); 

有没有办法做我想做的事?

+0

你不必要的过滤列表 – Michael

回答

7

filter方法删除那些不符合条件的元素。它不会使其余的操作不适用。移动map方法中的条件。

myList = myList 
    .stream() 
    .map(n -> (n % 2 == 0) ? n*2 : n) 
    .collect(Collectors.toList()); 
+0

所以,如果我有多个条件,我已经把一切都在地图里面()?有没有更优雅的方式? – xcoder

+0

是的。 “map”的目的是将一个值更改为另一个值,而不是'filter',其目的是删除不符合条件的元素。对我来说,这似乎够优雅。 – rgettman

+0

@xcoder - 你可以(应该)使用方法参考来进行更复杂的操作。 。myList.stream()地图(这个:: conditionallyMapSomeElements).collect(Collectors.toList()); –