JavaArrayList集合操作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaArrayList集合操作?相关的知识,希望对你有一定的参考价值。

Java中list集合中存在某些字段相同的实体类,把那些指定字段相同的实体类合成一条,并且其中累加,该怎么操作,各位大佬😭😭

假设需要合并的实体类是一个Java类,包含了多个字段,其中需要合并的字段名为"fieldName",那么可以按照以下步骤进行操作:

    定义一个Map,用于存储合并后的实体类,其中Key为"fieldName"的值,Value为合并后的实体类。

Map<Object, YourEntityClass> resultMap = new HashMap<>();

    遍历List集合,对于每一个实体类,根据"fieldName"的值从Map中获取已经合并的实体类,如果不存在,则将当前实体类添加到Map中;如果存在,则将当前实体类的相应字段累加到已经存在的实体类中。

    for (YourEntityClass entity : yourList)

    Object key = entity.getFieldName();

    if (resultMap.containsKey(key))

    YourEntityClass existingEntity = resultMap.get(key);

    // 累加相应字段

    existingEntity.setSomeField(existingEntity.getSomeField() + entity.getSomeField());

    else

    resultMap.put(key, entity);

    最终,将合并后的实体类从Map中取出来,组成一个新的List返回。

List<YourEntityClass> result = new ArrayList<>(resultMap.values());

这样,就可以实现根据某个字段值合并实体类并累加相应字段的操作。

参考技术A

可以使用Java8的Stream API来实现将指定字段相同的实体类合并,并累加操作。具体实现步骤如下:

    定义一个Map,用于存储指定字段相同的实体类;

    遍历list集合中的每一个实体类,根据指定字段的值作为Map的key,将相同key的实体类放到同一个List中;

    对每一个List中的实体类进行累加操作,并将结果更新到第一个实体类上;

    将Map中的实体类转换成List返回。

    示例代码如下:

import java.util.*;

import java.util.stream.Collectors;

public class Entity

private String field1;

private int field2;

public Entity(String field1, int field2)

this.field1 = field1;

this.field2 = field2;

public String getField1()

return field1;

public void setField1(String field1)

this.field1 = field1;

public int getField2()

return field2;

public void setField2(int field2)

this.field2 = field2;

public class Main

public static void main(String[] args)

List<Entity> list = new ArrayList<>();

list.add(new Entity("A", 1));

list.add(new Entity("B", 2));

list.add(new Entity("A", 2));

list.add(new Entity("B", 3));

Map<String, List<Entity>> map = list.stream()

.collect(Collectors.groupingBy(Entity::getField1));

List<Entity> result = new ArrayList<>();

for (List<Entity> entities : map.values())

Entity first = entities.get(0);

for (int i = 1; i < entities.size(); i++)

Entity entity = entities.get(i);

first.setField2(first.getField2() + entity.getField2());

result.add(first);

System.out.println(result);

上述代码中的Entity类表示实体类,包含两个字段:field1和field2。Main类中的main方法演示了如何将指定字段相同的实体类合并,并且将相同字段的field2值累加。运行该程序将输出以下结果:

[Entityfield1='A', field2=3, Entityfield1='B', field2=5]

其中,输出结果表示将list中的指定字段相同的实体类合并之后的结果。

参考技术B public List<Entity> mergeList(List<Entity> list)
Map<String, Entity> map = new HashMap<>();
for (Entity entity : list)
String key = entity.getSpecifiedField(); // 获取指定字段的值作为key
Entity existEntity = map.get(key);
if (existEntity != null) // 如果存在相同的key,则将实体类对象累加
existEntity.setNum(existEntity.getNum() + entity.getNum());
existEntity.setAmount(existEntity.getAmount() + entity.getAmount());
else
map.put(key, entity); // 如果不存在相同的key,则将实体类对象放入Map中


return new ArrayList<>(map.values());
本回答被提问者采纳

以上是关于JavaArrayList集合操作?的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker 集合遍历

集合:排序问题

java中怎么遍历list集合

java遍历list集合问题

Groovy集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )

Groovy集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )