给List里添加一字段并赋值

本文介绍如何在Java程序中为从数据库查询得到的List<Map>类型的记录添加一个名为AVGDAY的字段,并计算该字段的平均值。通过遍历列表并将平均值赋予每个Map对象的方式实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这么个问题,oracle查出来数据如下:

ID NAME DAY

001 路径1 28

002 路径2 26

003 路径3 29

004 路径4 24

... ... ...

现想在 这个 List李加入一个字段并赋值

ID NAME DAY AVGDAY

001 路径1 28 26.75

002 路径2 26 26.75

003 路径3 29 26.75

004 路径4 24 26.75

... ... ... ...

这个结果不能在sql里处理,只能用java程序,现平均值已经算出来了,怎么往list里的每行数据里加入这个字段并赋值?

 

 

答案:

 

 

如果list放的是对象,那对象就要加一个AVGDAY变量,和相应get,set方法。

如果是List里放Map那相对容易一些。

循环List,将里面的每一个Map,put进AVGDAY的值。

类似 List<Map> list =new ArrayList<Map>();//当然这里list是你从数据库中查询出的集合。

for(Map map : List){

       map.put("AVGDAY", 26.75);

}

 

实际例子 :

 

 

 

Map map = new HashMap();
    map.put("FORGID", forgid);
    map.put("FRCODE", frcode);
    map.put("PATHID", pathid);
    if(type!=null && !"".equals(type)){
    map.put("TYPE", type);
    }
    List<Map> pgdyList = getPathWHImpl().getPgdyList(map);
    System.out.print(pgdyList.size());
    System.out.println("\r");
    int i = 0;
    int j = 0;
       int sum = 0; //总和
       int avg = 0; //平均值
       while(i < pgdyList.size()){
        sum += Convert.toInteger(((HashMap)pgdyList.get(i)).get("PGBH").toString());
        i++;
       }
       avg = sum/pgdyList.size();
       /**
        * 循环将平均值放入查询结果中
       List<Map> list = new ArrayList<Map>();//当然这里list是你从数据库中查询出的集合。
        */
    for(Map map1 : pgdyList){
        map1.put("AVGDAY", avg);
    }
    
    
    modelAndView.addObject("pgdyList", pgdyList);

 

 

 

 

 

### 使用 Java Stream API 对列表中对象的字段进行赋值 当处理 `List` 中的对象希望更新这些对象的某些字段时,可以利用 Java 的 Stream API 结合 `peek()` 方法实现这目标。需要注意的是,在流操作期间修改源数据不是推荐的做法;通常建议创建新的对象实例来保持不可变性。 然而,如果确实需要直接设置现有对象内的属性,则可以通过如下方式完成: ```java // 假设有个类 Person 包含 name 和 age 字段 class Person { private String name; private int age; // 构造函数、getter/setter 省略... @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class Main { public static void main(String[] args) { List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25) ); // 更新每个人员的名字前上 Mr./Ms. people.stream() .peek(person -> person.setName("Mr./Ms. " + person.getName())) .collect(Collectors.toList()); // 打印更新后的人员名单 people.forEach(System.out::println); } } ``` 上述代码展示了如何遍历 `people` 列表将每个人的姓名前面添加上尊称 `"Mr./Ms."` 。这使用了 `peek()` 来访问每个元素,调用了其 setter 方法来进行必要的更改[^1]。 重要提示:虽然这种方法可以在技术层面上工作,但在实际开发过程中应谨慎对待这种做法。理想情况下应该遵循面向对象编程原则——即尽可能维护对象的状态不变性,而不是随意改变它们的内容。对于更复杂的应用场景,考虑采用映射到新实体的方式会更安全可靠。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值