0
点赞
收藏
分享

微信扫一扫

Java 8流API过滤两个List<Map>中有相同值的数据

问题描述

假设我们有两个列表:

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()):将过滤后的结果收集到一个新的列表中。

举报

相关推荐

0 条评论