jdk8 list数组常用方法

本文详细介绍了Java中List的常见操作,包括使用forEach循环遍历、删除元素、转换为Map、分组以及排序。同时,展示了如何利用Stream API进行过滤、匹配、属性提取和求和等操作,强调了在集合操作中的注意事项和最佳实践。
摘要由CSDN通过智能技术生成

1. 先定义公共list

	//User(id,type,name)
	List<User> userList = Arrays.asList(new User(1, 1, "张三"),
			new User(2, 1, "李四"),
			new User(3, 2, "王五"));
			//不做此步迭代器循环删除时会报错
			List<User> userList = new ArrayList<>(userList1);

2.最常用的循环 forEach

  1. forEach
	userList,forEach(user ->{
	//循环取值
	//return  只是跳出本次循环和for循环的continue 一样效果
	});
  1. 循环删除
  Iterator it = userList.iterator();
        while (it.hasNext()) {
            User user = (User) it.next();
            if (2 == user.getId()){
                continue;
            }
            it.remove();
        }

3.list转map toMap

  1. 二选一即可
        Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
        Map<Integer, User> userMap1 = userList.stream().collect(Collectors.toMap(User::getId, user -> user));

2.取对象的属性值

	Map<Integer, Integer> typeMap = userList.stream().collect(Collectors.toMap(User::getId, User::getType));

4.分组 groupingBy

	//对象分组
	Map<Integer, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getType));
	//对象属性分组
	Map<Integer, List<String>> map2 =userList.stream().collect(Collectors.groupingBy(User::getType, Collectors.mapping(User::getTname, Collectors.toList())));
	// 分组后导致排序错乱问题解决
	Map<Integer, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getType, LinkedHashMap::new, Collectors.toList()));

5.排序 sorted

	//根据Id升序排序
	List<User> userListSortId = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
	//根据Id降序排序
	List<User> userListSortId1 = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
	//
	List<String> a  = new ArrayList<>();
        a.add("1");
        a.add("3");
        a.add("2");
        //降序 3 2 1 
        a.sort(Comparator.reverseOrder());
        //升序  1 2 3 
        a.sort(String::compareTo);

6.List属性判断 anyMatch、allMatch、noneMatch

		//list任意一个User的id ==1 返回 true 否则返回false
		//与之相对的方法时 noneMatch
		boolean flag = userList.stream().anyMatch(user -> {
			//判断条件
			return user.getId() == 1;
		});
		//list所有User元素 的id == 1 返回true 否则返回false
		boolean flag1 = userList.stream().allMatch(user -> {
			//判断条件
			return user.getId() == 1;
		});
	
		//list任意User的id == 1 返回 false 否则返回 true
		boolean flag2 = userList.stream().noneMatch(user -> {
			//判断条件
			return user.getId() == 1;
		});

7.List返回对象其中的一个属性值

LIst<String> userNames = userList.stream().map(User::getName).collect(Collectors.toList());
LIst<Interger> userNames = userList.stream().map(user ->  user.getName()).collect(Collectors.toList());

8.BigDecimal 求和

//OrderDetail (BigDecimal qty,Long skuId,String name,Interger col1)
//List<OrderDetail > details   一个订单明细集合,相同的品允许存在多条
//所有数量汇总求和
BigDecimal totalQty= details.stream().map(OrderDetail::getQty).reduce(BigDecimal.ZERO, BigDecimal::add);
//数量按商品汇总求和
Map<Long, BigDecimal> detailQtyMap = receiveLogDTOS.stream().collect(Collectors.groupingBy(OrderDetail::getSkuId,
                Collectors.reducing(BigDecimal.ZERO, OrderDetail::getQty, BigDecimal::add)));
      // Collectors.reducing(BigDecimal.ZERO, OrderDetail::getQty, BigDecimal::add) 
      //第一个参数 返回的数据类型
      //第二个参数 
      //第三个参数 计算方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值