java - 结合使用 java 流的操作
问题描述
我正在做以下两个操作
- 遍历对象列表并
String, Boolean
根据条件创建映射。
Map<String,Boolean> myMap = new HashMap<>();
Iterator<Person> iterator = personList.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
if (isValidperson(person)) {
if (person.getName() != null) {
myMap.put(person.getName(), true);
} else {
myMap.put(person.getName(), false);
}
}
}
现在我根据我在上面创建的地图检查名称列表,如果值为真,则添加到最终列表
List<String> refinedList = new ArrayList<>();
for (String name : nameList) {
if (myMap.get(name) != null && myMap.get(name)) {
refinedList.add(name);
}
}
我需要使用 Java 流来简化逻辑。上述工作正常,否则。
解决方案
在第一个操作中,您将过滤掉所有无效人员,并将有效人员收集到地图中,因此:
Map<String,Boolean> myMap = personList.stream()
.filter(YourClass::isValidPerson)
.collect(Collectors.toMap(x -> x.getName(), x -> x.getName() != null))
但实际上,地图最多只有一个false
条目,因为您不能将多个null
s 添加到 aHashMap
中,所以使用 a 根本没有多大意义HashMap
。
我建议使用HashSet
:
Set<String> mySet = personList.stream()
.filter(YourClass::isValidPerson)
.map(Person::getName)
.filter(Objects::nonNull)
.collect(Collectors.toSet())
然后您可以轻松地检查contains
O(1) 时间:
List<String> refinedList = nameList.stream().filter(mySet::contains).collect(Collectors.toList());
推荐阅读
- python - 如何反转熊猫数据框中的字符串?
- python - set_permissions 仅适用于管理员
- google-coral - edgetpu_compiler:如何组合两个 tflite 模型
- python - 有没有办法将某些消息保存为变量供以后使用?(不和谐机器人)
- spring-boot - Kubernetes 和 Spring Boot @Service 负载均衡
- database - 在 MS Access 中查找具有多条记录的 ID 的最近日期
- python - pandas 类别:只保留最常见的并用 NaN 替换 rest
- python-3.x - 如何在数据框的列python3中拆分名称
- algorithm - 将 CSR/CSC 转换为 BSR 的算法复杂度
- sql - Psql - 生成具有运行总数的系列