java - Java Stream Map 过滤、移除和收集
问题描述
我有Map
1000 个项目,我想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 个值的列表
解决方案
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();
}
}
推荐阅读
- javascript - 需要帮助将变量传递给Angular 2中的对话框
- android - 有没有更短的方法来使用 textView 在 Firebase 数据库中显示数据?
- python - 当两行具有相同的第一个值时如何将一行的数据添加到另一行
- node.js - 我应该重试 ENOENT 错误吗?
- sql - 用户“MicrosoftAccount\xxx”登录失败。(Microsoft SQL Server,错误:18456)
- java - Spring Boot 2 编程配置 Embedded Servlet Container
- python - 解析 MWS Boto 响应时出错
- graph - 在 DAG 中查找所有“树状”顶点
- polymer - Polymer 3 使用行为的方式是什么?
- php - Codemirror 在 php 模式下崩溃