gpt4 book ai didi

Java:将一个对象列表的属性映射到另一个对象列表的最有效方法

转载 作者:行者123 更新时间:2023-12-02 07:52:23 25 4
gpt4 key购买 nike

我正在寻找一种有效的设计模式,将一个对象列表映射到另一个对象列表,并且它们之间具有零或一对一的关系。我意识到这种事情通常是在关系数据库中完成的,但在这种特殊情况下,它确实需要在 Java 应用程序中完成......

假设第一个列表包含 Foo对象(即 List<Foo> ):

public class Foo {
public Integer id;
public String barName;
}

第二个列表包含 Bar对象(即 List<Bar> ):

public class Bar {
public Integer fooId;
public String name;
}

如何最有效地映射所有 name来自Bar的属性到Foo对象在哪里 Bar.fooId等于 Foo.id

我能想到的最好的是:

void mapFooBar(List<Foo> fooList, List<Bar> barList) {
for (Bar bar : barList) {
for (Foo foo : fooList) {
if (bar.fooId.equals(foo.id)) foo.barName = bar.name;
}
}
}

编辑:根据几个答案,我改进了我的代码,如下所示:

void mapFooBar(List<Foo> fooList, List<Bar> barList) {
Map<Integer, String> barMap = new HashMap<Integer, String>();
for (Bar bar : barList)
barMap.put(bar.fooId, bar.name);

for (Foo foo : fooList)
if (barMap.containsKey(foo.id)) foo.barName = barMap.get(foo.id);
}

有更好的方法吗?

最佳答案

我认为您正在寻找类似 Apache BeanUtils 的东西或Springs执行。只需确保要在其之间复制数据的两个对象之间的属性命名相同即可。所以采用你的代码:

void mapFooBar(List<Foo> fooList, List<Bar> barList) {
for (Bar bar : barList) {
for (Foo foo : fooList) {
if (bar.fooId.equals(foo.id)) {
BeanUtils.copyProperties(foo, bar);
}
}
}
}

现在复制已完成,让我们看看您的循环。最好的选择是使用 fooId 作为键将对象保留在 map 中(假设没有重复的对象)。

void mapFooBar(Map<Integer, Foo> fooMap, Map<Integer, Bar> barMap) {
for (Integer key : fooMap.keySet()) {
if (barMap.containsKey(key) {
Bar bar = barMap.get(key);
Foo foo = fooMap.get(key);
BeanUtils.copyProperties(foo, bar);
}
}
}

关于Java:将一个对象列表的属性映射到另一个对象列表的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com