首页 > 解决方案 > Java Stream Map 过滤、移除和收集

问题描述

我有Map1000 个项目,我想List从前 500 个项目中生成一个Map并删除从Map.

换句话说,我想过滤、收集到 aList并从 a 中删除项目Map

我正在尝试这样的事情:

final int i = 0;
int max = 5;
Map<String, Object> map = new HashMap<>();
map.put("ads", "123");
map.put("qwe", "123");
map.put("cvb", "123");
map.put("asd", "123");
map.put("iop", "123");
map.put("jkl", "123");
map.put("yui", "123");

List list = map.entrySet().stream().filter(y -> i++ < max).collect(Collectors.toList());

预期输出:

具有 2 个值的映射

包含 5 个值的列表

标签: javacollectionsjava-stream

解决方案


Stream API 旨在创建一个新集合,而不是更改现有集合,从中创建一个流。

在这种情况下最好使用迭代器功能。像这样:

final int MAX = 500;

Map<String, String> map = new HashMap<>();
map.put("Item1", "Item 1 value");
map.put("Item2", "Item 2 value");
// ...
map.put("Item1000", "Item 1000 value");

List<String> list = new ArrayList<>();


var iterator = map.entrySet().iterator();
for (int i = 0; i< MAX; i++) {
  if (iterator.hasNext()) {
    var item = iterator.next();
    list.add(item.getValue());
    iterator.remove();
  }
}

推荐阅读