问题描述
假设我们有两个列表:
bondInfo:一个包含债券信息的列表,每个元素是一个Map<String, Object>,其中键为"BOND_ID"。
conformList:另一个包含债券信息的列表,每个元素也是一个Map<String, Object>,其中键为"BOND_ID"。
我们需要从conformList中筛选出那些BOND_ID值在bondInfo中存在的情况。
解决方案
初始版本
首先,我们可以分两步来实现这个功能:
从bondInfo中提取所有的BOND_ID值。
使用这些BOND_ID值来过滤conformList。
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 假设这是你的两个列表
List<Map<String, Object>> bondInfo = ...; // 初始化你的bondInfo列表
List<Map<String, Object>> conformList = ...; // 初始化你的conformList列表
// 从bondInfo中提取所有的BOND_ID值
List<Object> bondIds = bondInfo.stream()
.map(map -> map.get("BOND_ID"))
.collect(Collectors.toList());
// 过滤conformList,只保留BOND_ID在bondIds中存在的条目
List<Map<String, Object>> filteredConformList = conformList.stream()
.filter(map -> bondIds.contains(map.get("BOND_ID")))
.collect(Collectors.toList());
// 打印结果
System.out.println(filteredConformList);
}
}
合并版本
为了简化代码,我们可以将上述两步操作合并成一个lambda表达式,使用嵌套的流操作来实现。
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 假设这是你的两个列表
List<Map<String, Object>> bondInfo = ...; // 初始化你的bondInfo列表
List<Map<String, Object>> conformList = ...; // 初始化你的conformList列表
// 合并操作:从bondInfo中提取BOND_ID值,并过滤conformList
List<Map<String, Object>> filteredConformList = conformList.stream()
.filter(map -> bondInfo.stream()
.anyMatch(bondMap -> bondMap.get("BOND_ID").equals(map.get("BOND_ID"))))
.collect(Collectors.toList());
// 打印结果
System.out.println(filteredConformList);
}
}
代码解释
导入必要的包:
java.util.List:用于定义列表。
java.util.Map:用于定义映射。
java.util.stream.Collectors:用于流操作的收集器。
初始化列表:
bondInfo:包含债券信息的列表。
conformList:另一个包含债券信息的列表。
合并操作:
conformList.stream():将conformList转换为一个流。
filter(map -> bondInfo.stream().anyMatch(bondMap -> bondMap.get("BOND_ID").equals(map.get("BOND_ID")))):过滤conformList,只保留那些BOND_ID值在bondInfo中存在的条目。
collect(Collectors.toList()):将过滤后的结果收集到一个新的列表中。