java outer_java – 两个集合的LEFT OUTER JOIN

java outer_java – 两个集合的LEFT OUTER JOIN更容易进行就地更改 修改 col1 列表而不是创建新列表 这是 Java 8 解决方案 publicList gt merge List gt col1 Listcol2 col1 forEach map gt map put TypeId AMOUNT col2 stream filter e gt e player id int map get TypeId P

更容易进行就地更改,修改col1列表而不是创建新列表.这是Java-8解决方案:

public List > merge(List > col1, List col2){

col1.forEach(map -> map.put(TypeId.AMOUNT,

col2.stream()

.filter(e -> e.player_id == (int)map.get(TypeId.PLAYER) &&

e.platform_id == (int)map.get(TypeId.PLATFORM))

.findFirst().map(e -> e.amount).orElse(null)

));

return col1;

}

我想在这种情况下改变col1到位是令人满意的.请注意,即使将结果存储到新列表中,如果修改现有映射也无效.因此,要使结果完全独立于col1,您必须复制所有地图.

另请注意,对于遍历col2的每个col1条目,它不是非常有效,因此复杂性大致为col1.size()* col2.size().在你的情况下,最好扔掉一个Entity类并创建一个只存储platformId和playerId的新类(使用正确实现的equals和hashCode)并将其用作map键:

public static class PlatformAndPlayer {

private final int playerId, platformId;

public PlatformAndPlayer(int playerId, int platformId) {

this.playerId = playerId;

this.platformId = platformId;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + platformId;

result = prime * result + playerId;

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

PlatformAndPlayer other = (PlatformAndPlayer) obj;

if (platformId != other.platformId)

return false;

if (playerId != other.playerId)

return false;

return true;

}

}

这种方式而不是col2列表,你将有一个地图:

Map col2 = new HashMap<>();

col2.put(new PlatformAndPlayer(1, 1), BigDecimal.valueOf(100));

col2.put(new PlatformAndPlayer(2, 2), BigDecimal.valueOf(200));

col2.put(new PlatformAndPlayer(3, 4), BigDecimal.valueOf(300));

现在您的任务可以轻松有效地解决(即使使用Java 5):

public static List> merge(

List> col1,

Map col2) {

for (Map map : col1) {

map.put(TypeId.AMOUNT, col2.get(new PlatformAndPlayer(

(int) map.get(TypeId.PLAYER), (int) map.get(TypeId.PLATFORM))));

}

return col1;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220774.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:41
下一篇 2026年3月17日 下午7:41


相关推荐

  • 宏基因组注释和可视化神器MEGAN入门

    宏基因组注释和可视化神器MEGAN入门文章目录 MEGAN 宏基因组功能和物种分类 MEGAN 功能简介原理简要示意图 MEGAN 特有文件格式 RMAMEGAN 下载 MEGAN 使用 MEGAN linux 版本安装 MEGAN 使用指南 Linux 提取注释内容 物种和功能 提取物种注释数据 提取功能 Win 版安装和使用 MEGAN 安装 Win 版使用指南 MEGAN 主界面介绍 MEGAN 输入介绍 MEGAN 分析进阶双样本比对 MEGAN 界面可视化 两样本 r

    2025年10月6日
    7
  • intellidea2021.4激活码_通用破解码

    intellidea2021.4激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    71
  • asp数组使用

    asp数组使用数组的定义 DimMyArrayMy Array 1 5 123 12 98 可扩展数组 DimMyArray fori 0to10ReDimPr i MyArray i inext 将一个字符串分割并返回分割结果的数组 DimMyArrayMy Split

    2026年3月16日
    1
  • 马尔可夫不等式和切比雪夫不等式

    马尔可夫不等式和切比雪夫不等式Markov sInequality 中文叫马尔科夫不等式或马尔可夫不等式 若随机变量 XXX 只取非负值 则 a gt 0 foralla gt 0 a gt 0 有 P X a E X a mathbb P X gea le dfrac mathbb E X a P X a aE X 证明 取 Ya aI X a Y a a mathbb I X gea Ya aI X a 则必有 Ya XY a leXYa X 进而有 E Ya E X mathbb E

    2026年3月17日
    2
  • 用户登录与AD域集成[通俗易懂]

    用户登录与AD域集成[通俗易懂]1.关于AD域的介绍AD的全称是ActiveDirectory:活动目录域(Domain):1)域是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即TrustRelation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后2)两个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,…

    2022年5月17日
    150
  • 指数函数求导_常见求导公式表

    指数函数求导_常见求导公式表a^x=y求y'y'=d(a^x)/dx=lim(x->0):(a^(x+dx)-a^x)/dx(1)根据指数函数可推出:x^(y+z)=x^y*x^z所以(

    2022年8月2日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号