代码之家  ›  专栏  ›  技术社区  ›  Gautham M

在filter方法中使用Java流添加到列表

  •  2
  • Gautham M  · 技术社区  · 6 年前
    Map<Integer, Boolean> map1= new HashMap<>();
    map1.put(1, true);
    map1.put(2, true);
    map1.put(3, false);
    map1.put(4, true);
    map1.put(5, false);
    
    Map<Integer, Integer> map2= new HashMap<>();
    map2.put(1, 1);
    map2.put(2, 2);
    map2.put(3, 3);
    map2.put(4, 4);
    map2.put(5, 5);
    List<Integer> valids = new ArrayList<>();
    map2.values().stream().filter(value-> map1.get(value) ? valids.add(account) : false);
    

    当我试图输出列表的值时 valids 它返回一个空列表。为什么会这样?在执行以下操作时,列表的引用是否会更改 stream 手术?

    注意:我可以使用 collect() 方法。

    2 回复  |  直到 4 年前
        1
  •  1
  •   Chota Bheem    6 年前

    您的代码不正确,因为使用 filter 滤波器 .

    你应该终止 滤波器

    用途:

    map2.values().stream().filter(map1::get).forEach(trues::add);

    或者,如果您想使用这种方式,而不是通过收集器函数关闭流

    map2.values().stream().filter(value-> map1.get(value) ? trues1.add(value) : false).count();
    
        2
  •  1
  •   Pankaj Singhal    6 年前

    A filter 方法应该 滤波器 流,而不是添加到其他列表中。而且,您的流没有任何终端操作—这是一种错误的方法。

    改为使用 collect