java list 分组求和 java8

public static void main(String[] args) {
		List<Car> listOld = new ArrayList<>();
		Car car1 = new Car();
		car1.setNum(1);
		car1.setName("A");
		car1.setColor("红");
		car1.setType(0);
		Car car2 = new Car();
		car2.setNum(1);
		car2.setName("B");
		car2.setColor("黄");
		car2.setType(0);
		Car car3 = new Car();
		car3.setNum(1);
		car3.setName("C");
		car3.setColor("蓝");
		car3.setType(0);
		Car car4 = new Car();
		car4.setNum(1);
		car4.setName("A");
		car4.setColor("红");
		car4.setType(0);
		Car car5 = new Car();
		car5.setNum(1);
		car5.setName("A");
		car5.setColor("红");
		car5.setType(1);
		listOld.add(car1);
		listOld.add(car2);
		listOld.add(car3);
		listOld.add(car4);
		listOld.add(car5);

		List<Car> listNew = new ArrayList<>();
		//筛选分组
		Map<String, List<Car>> map = listOld.stream().filter(o->o.getType().equals(0)).collect(Collectors.groupingBy(o -> o.getName() + o.getColor()));
		//求和
		for (Map.Entry<String, List<Car>> entry : map.entrySet()) {
			Car item = new Car();
			BeanUtils.copyProperties(entry.getValue().get(0),item);
			Integer a = item.getNum() == null ? 0 : item.getNum();
			int i = 0;
			for (Car car : entry.getValue()) {
				if (i > 0) {
					Integer a1 = car.getNum() == null ? 0 : car.getNum();
					a += a1;
				}
				i++;
			}
			item.setNum(a);
			listNew.add(item);
		}
		//筛选求和分组之前
		System.out.println(JSON.toJSON(listOld));
		//筛选求和分组之后
		System.out.println(JSON.toJSON(listNew));
	}

分组以前

[
    {
        "color":"红",
        "num":1,
        "name":"A",
        "type":0
    },
    {
        "color":"黄",
        "num":1,
        "name":"B",
        "type":0
    },
    {
        "color":"蓝",
        "num":1,
        "name":"C",
        "type":0
    },
    {
        "color":"红",
        "num":1,
        "name":"A",
        "type":0
    },
    {
        "color":"红",
        "num":1,
        "name":"A",
        "type":1
    }
]

分组求和之后

[
    {
        "color":"红",
        "num":3,
        "name":"A",
        "type":0
    },
    {
        "color":"黄",
        "num":1,
        "name":"B",
        "type":0
    },
    {
        "color":"蓝",
        "num":1,
        "name":"C",
        "type":0
    }
]

测试用到的实体

package com.gw.service.outbound.entity;

import lombok.Data;

/**
 * @author by lxy
 * @date 2020-07-11 09:38
 */
@Data
public class Car {
	private String name;
	private Integer num;
	private String color;
	private Integer type;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用Stream的groupingBy和summingLong方法来实现List分组求和。首先,使用groupingBy方法按照指定的属性进行分组,然后使用summingLong方法对每个分组的元素进行求和。最后,可以通过entrySet方法将结果取出并保存到对应的列表中。 示例代码如下: 1. 首先,创建一个Map对象,用于存储分组求和的结果: Map<String, Long> map = list.stream() .collect(Collectors.groupingBy(TbSteelSemiProduct::getQlName, Collectors.summingLong(TbSteelSemiProduct::getGjjgSjsl))); 2. 然后,使用entrySet方法将map集合中的映射关系取出,并将结果保存到对应的列表中: Set<Entry<String, Long>> entrySet = map.entrySet(); for (Entry<String, Long> entry : entrySet) { xList.add(entry.getKey()); yList.add(entry.getValue().toString()); } 另外,如果需要对List中的其他类型进行求和,可以使用summingInt或mapToInt方法。summingInt方法对整型属性进行求和,而mapToInt方法将对象转换为整型后进行求和。 示例代码如下: 1. 使用summingInt方法对User对象的年龄属性进行求和: int ageSum = userList.stream() .collect(Collectors.summingInt(User::getAge)); 2. 使用mapToInt方法将User对象的年龄属性转换为整型后进行求和: int ageSumTwo = userList.stream() .mapToInt(User::getAge) .sum(); 这样就可以实现对Java List分组求和操作了。引用提供了基于Stream的groupingBy和summingLong方法的示例代码,而引用提供了关于Java 8 Stream自定义分组求和并排序的实现的详细介绍。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java 8中 直接通过List进行分组求和](https://blog.csdn.net/qq_16165363/article/details/117704861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [java8 stream自定义分组求和并排序的实现](https://download.csdn.net/download/weixin_38613330/12743652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值