第二课:Lambda表达式详解内容

java1.8中lambda表达式

一下是关于lambda中的常规的用法内容;

1.将map中的value转成对应的list集合内容

Map<String,UserEntity>map = new HashMap<>();
		UserEntity entity = null;
		for (int i = 0; i < 10; i++) {
			entity = new UserEntity();
			entity.setCode("code"+i);
			entity.setId(i);
			entity.setName("小康康"+i);
			map.put(entity.getCode(), entity);
		}
		
		//这个是将map中的value转到list 里面存放
		List<UserEntity> list = map.entrySet().stream().map(e->e.getValue()).collect(Collectors.toList());
		//循环打印对象内容
		list.forEach(e->System.out.println(JSON.toJSONString(e)));

		//下面的这种方式也是只是转成list的格式不同
		List<UserEntity> list1 = map.entrySet().stream().map(e->e.getValue()).collect(Collectors.toCollection(ArrayList::new));

2.将list的对象转成map指定属性作为key

上一步的list通过下面转换成map code作为key,对象作为value

		Map<String, UserEntity> map1 = list.stream().collect(Collectors.toMap(UserEntity::getCode,e->e));

3.list集合排序使用

		//默认是按照code 从小到大排序
		list.sort(Comparator.comparing(UserEntity::getCode));
		//这个排序默认是按照UserEntity code 从大到小排列的
		list.sort((u1,u2)->u2.getCode().compareTo(u1.getCode()));

4.通过filter获取元素信息内容

		//如果直接这么写  如果集合中没有匹配到直接抛出异常/如果匹配到则直接返回 可以使用下面的 orElse(null),如果没有匹配到设置为空
		UserEntity userEntity = list.stream().filter(e->e.getCode().equals("code9")).findAny().get();
		//为了防止出现异常
		UserEntity userEntity1 = list.stream().filter(e->e.getCode().equals("code5")).findAny().orElse(null);
		//将匹配到的设置到指定的对象中去
		List<UserEntity> list2 = list.stream().filter(e->e.getCode().equals("code9")).collect(Collectors.toList());


5.list里面的去重的操作内容

List<UserEntity>list3 = new ArrayList<UserEntity>(){{
			add(new UserEntity(1, 100, "candy"));
			add(new UserEntity(2, 100, "candy"));
			add(new UserEntity(3, 200, "candy"));
			add(new UserEntity(4, 200, "小康"));
			add(new UserEntity(5, 200, "小康"));
			add(new UserEntity(6, 300, "candy1"));
			add(new UserEntity(7, 300, "candy2"));
			add(new UserEntity(8, 300, "candy3"));
			add(new UserEntity(9, 400, "candy4"));
		}};

		//根据list元素的的name去重
		List<UserEntity> collect3 = list3.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName()))),ArrayList::new));

		//这个是将list 按照集合中的某个元素的属性值进行分组成map结构 按照money作为key,对象的集合作为value
		Map<Integer, List<UserEntity>> collect4 = list3.stream().collect(Collectors.groupingBy(UserEntity::getMoney));

		//这个是将list 按照集合中的某个元素的属性值进行分组成map结构 按照money作为key 元素的个数作为value
		Map<Integer, Long> collect6 = list3.stream().collect(Collectors.groupingBy(UserEntity::getMoney,Collectors.counting()));

		//获取list里面元素的获取name重复的
		List<String> collect8 = list3.stream().collect(Collectors.groupingBy(e->e.getName(),Collectors.counting())).entrySet().stream().filter(e->e.getValue() > 1).map(e->e.getKey()).collect(Collectors.toList());
		
		//获取list里面的元素的name不重复的
		List<String> collect9 = list3.stream().collect(Collectors.groupingBy(e->e.getName(),Collectors.counting())).entrySet().stream().filter(e->e.getValue() == 1).map(e->e.getKey()).collect(Collectors.toList());

6.集合中的运算操作

6.1集合中元素中某个属性计算结果

		List<UserEntity>list4 = new ArrayList<UserEntity>(){{
			add(new UserEntity(1, 100, "candy",new BigDecimal("100")));
			add(new UserEntity(2, 100, "candy",new BigDecimal("100")));
			add(new UserEntity(3, 200, "candy",new BigDecimal("100")));
			add(new UserEntity(4, 200, "小康",new BigDecimal("100")));
			add(new UserEntity(5, 200, "小康",new BigDecimal("100")));
			add(new UserEntity(6, 300, "candy1",new BigDecimal("100")));
			add(new UserEntity(7, 300, "candy2",new BigDecimal("100")));
			add(new UserEntity(8, 300, "candy3",new BigDecimal("100")));
			add(new UserEntity(9, 400, "candy4",new BigDecimal("100")));
		}};
//     	获取集合对象中的某个属性的和
		BigDecimal result = list4.stream().filter(e->e.getName().equals("candy")).map(e->e.getScore()).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
		System.out.println("用户名为candy所有用户的score 总数是"+result);
		
		Integer result2 = list4.stream().filter(e->e.getName().equals("candy")).map(e->e.getMoney()).reduce((e,r)->e+r).orElse(0);
		System.out.println("方式1:用户名为candy所有用户的money 总数是"+result2);
		
		result2 = list4.stream().filter(e->e.getName().equals("candy")).map(e->e.getMoney()).reduce(0,Integer::sum);
		System.out.println("方式2:用户名为candy所有用户的money 总数是"+result2);

6.2 集合中元素获取最大值/最小值

最大值/最小值相同的有多个元素 总是顺序去第一个元素的
		List<UserEntity>list5 = new ArrayList<UserEntity>(){{
			add(new UserEntity(1, 100, "小康康1",new BigDecimal("1001")));
			add(new UserEntity(2, 100, "小康康2",new BigDecimal("1002")));
			add(new UserEntity(3, 200, "小康康3",new BigDecimal("1003")));
			add(new UserEntity(4, 50, "小康康4",new BigDecimal("1004")));
			add(new UserEntity(5, 200, "小康康5",new BigDecimal("1005")));
			add(new UserEntity(6, 300, "candy1",new BigDecimal("1006")));
			add(new UserEntity(7, 300, "candy2",new BigDecimal("1007")));
			add(new UserEntity(8, 300, "candy3",new BigDecimal("1008")));
			add(new UserEntity(9, 400, "candy4",new BigDecimal("1009")));
		}};
		
		String maxScoreUserName = list5.stream().max(Comparator.comparing(UserEntity::getScore)).map(e->e.getName()).orElseGet(null);
		System.out.println("方式1:查询 集合中score最高的用户"+maxScoreUserName);
		maxScoreUserName = list5.stream().collect(Collectors.maxBy(Comparator.comparing(UserEntity::getScore))).map(e->e.getName()).orElseGet(null);
		System.out.println("方式2:查询 集合中score最高的用户"+maxScoreUserName);
		maxScoreUserName = list5.stream().reduce((x,y)-> x.getScore().compareTo(y.getScore())>0 ? x : y).map(e->e.getName()).orElseGet(null);
		System.out.println("方式3:查询 集合中score最高的用户"+maxScoreUserName);
		
		BigDecimal bigDecimal = list5.stream().map(e->e.getScore()).reduce(BigDecimal::max).get();
		System.out.println("查询 集合中score最高值:"+bigDecimal);
	
		String mminScoreUserName = list5.stream().min(Comparator.comparing(UserEntity::getMoney)).map(e->e.getName()).orElseGet(null);
		System.out.println("方式1:查询 集合中money最小的用户"+mminScoreUserName);
		maxScoreUserName = list5.stream().reduce((x,y)-> x.getMoney().compareTo(y.getMoney())<0 ? x : y).map(e->e.getName()).orElseGet(null);
		System.out.println("方式2:查询 集合中money最小的用户"+mminScoreUserName);
		
		Integer totalMoney = list5.stream().collect(Collectors.summingInt(UserEntity::getMoney));
		System.out.println("list5中的总金额"+totalMoney);
		
		Double averagingMoney = list5.stream().collect(Collectors.averagingInt(UserEntity::getMoney));
		System.out.println("list5中的金额平均值"+averagingMoney);
		
	

6.3 集合拼接成字符串

		String result3 = list4.stream().filter(e->(e.getId()<4)).map(e->e.getName()).collect(Collectors.joining(","));
		System.out.println("用户id小于4的用户名"+result3);
		//用户id小于4的用户名candy,candy,candy

以上就是关于lambda表达式的常规用法;基本上通过stream能完成容器的大部分的操作内容.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值