You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对比两个ArrayList并合并:按coin匹配将price字段合并至coinList

解决方案:匹配Coin名称并合并两个列表数据

当然可以实现!这是Java开发里很常见的集合数据合并场景,咱们一步步来搞定它:

核心思路

  • 先把priceList转换成以coin名称为Key、price为Value的Map,这样后续查找价格的效率会大幅提升(从嵌套循环的O(n*m)降到O(n))
  • 遍历coinList中的每个元素,根据coin名称去Map中匹配对应的price,找到后直接添加到第一个列表的元素里

推荐实现:使用自定义实体类(类型更安全)

实际开发中更推荐用自定义类来存储这些数据,避免Map的类型转换风险,代码可读性也更高:

1. 定义实体类

// 存储coin基础信息的类,新增price字段用于接收合并后的数据
class CoinEntry {
    private String coin;
    private double confirmed;
    private double price; // 新增的价格字段

    // 构造器
    public CoinEntry(String coin, double confirmed) {
        this.coin = coin;
        this.confirmed = confirmed;
    }

    // Getter和Setter方法
    public String getCoin() { return coin; }
    public double getConfirmed() { return confirmed; }
    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }

    // 重写toString方便查看结果
    @Override
    public String toString() {
        return "CoinEntry{coin='" + coin + "', confirmed=" + confirmed + ", price=" + price + "}";
    }
}

// 存储coin价格信息的类
class PriceEntry {
    private String coin;
    private double price;

    public PriceEntry(String coin, double price) {
        this.coin = coin;
        this.price = price;
    }

    public String getCoin() { return coin; }
    public double getPrice() { return price; }
}

2. 合并数据的核心代码

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CoinPriceMerger {
    public static void main(String[] args) {
        // 初始化你的coinList
        List<CoinEntry> coinList = new ArrayList<>();
        coinList.add(new CoinEntry("Litecoin", 0.00));
        coinList.add(new CoinEntry("Bitcoin", 0.00));
        coinList.add(new CoinEntry("Zcoin", 0.00));

        // 初始化你的priceList
        List<PriceEntry> priceList = new ArrayList<>();
        priceList.add(new PriceEntry("Bitcoin", 1000));
        priceList.add(new PriceEntry("Litecoin", 1000));
        priceList.add(new PriceEntry("Zcoin", 1000));

        // 把priceList转成Map,快速查找价格
        Map<String, Double> priceMap = priceList.stream()
                .collect(Collectors.toMap(PriceEntry::getCoin, PriceEntry::getPrice));

        // 遍历coinList,匹配并设置价格
        for (CoinEntry coin : coinList) {
            String coinName = coin.getCoin();
            if (priceMap.containsKey(coinName)) {
                coin.setPrice(priceMap.get(coinName));
            }
            // 可选:如果某个coin在priceList中不存在,可以设置默认值或做异常处理
            // else { coin.setPrice(0.0); }
        }

        // 输出测试结果
        coinList.forEach(System.out::println);
    }
}

备选实现:使用HashMap存储数据(适配你的原始格式)

如果你的列表元素是用HashMap<String, Object>存储的,也可以这样实现:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MapBasedMerger {
    public static void main(String[] args) {
        // 初始化coinList
        List<Map<String, Object>> coinList = new ArrayList<>();
        
        Map<String, Object> litecoin = new HashMap<>();
        litecoin.put("coin", "Litecoin");
        litecoin.put("confirmed", 0.00);
        coinList.add(litecoin);

        Map<String, Object> bitcoin = new HashMap<>();
        bitcoin.put("coin", "Bitcoin");
        bitcoin.put("confirmed", 0.00);
        coinList.add(bitcoin);

        Map<String, Object> zcoin = new HashMap<>();
        zcoin.put("coin", "Zcoin");
        zcoin.put("confirmed", 0.00);
        coinList.add(zcoin);

        // 初始化priceList
        List<Map<String, Object>> priceList = new ArrayList<>();
        
        Map<String, Object> btcPrice = new HashMap<>();
        btcPrice.put("coin", "Bitcoin");
        btcPrice.put("price", 1000);
        priceList.add(btcPrice);

        Map<String, Object> ltcPrice = new HashMap<>();
        ltcPrice.put("coin", "Litecoin");
        ltcPrice.put("price", 1000);
        priceList.add(ltcPrice);

        Map<String, Object> zecPrice = new HashMap<>();
        zecPrice.put("coin", "Zcoin");
        zecPrice.put("price", 1000);
        priceList.add(zecPrice);

        // 转换priceList为Map
        Map<String, Integer> priceMap = new HashMap<>();
        for (Map<String, Object> priceEntry : priceList) {
            String coinName = (String) priceEntry.get("coin");
            Integer price = (Integer) priceEntry.get("price");
            priceMap.put(coinName, price);
        }

        // 合并数据到coinList
        for (Map<String, Object> coinEntry : coinList) {
            String coinName = (String) coinEntry.get("coin");
            if (priceMap.containsKey(coinName)) {
                coinEntry.put("price", priceMap.get(coinName));
            }
        }

        // 输出结果
        coinList.forEach(System.out::println);
    }
}

小提示

  • 用Map做中间转换是关键,尤其是当你的列表数据量较大时,能显著提升性能
  • 如果存在coin名称不匹配的情况,记得在代码中处理(比如设置默认价格、打印日志等)

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:17