Java之Stream流的使用总结

本文主要讲解:Java 8 Stream之Collectors.groupingBy()分组示例。基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库既有的鼻端

Collectors.groupingBy() 分组之常见用法

1、基本用法:按某一字段分组汇总,返回列表。

	public void groupingByCity() {
		Map<String, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(Employee::getCity));
 
		map.forEach((k, v) -> {
			System.out.println(k + " = " + v);
		});
	}

2、分组之统计每个分组,包含count,average,sum,join等。

	public void groupingByCount() {
        //count
		Map<String, Long> map = employees.stream()
				.collect(Collectors.groupingBy(Employee::getCity, Collectors.counting()));
        //average
		Map<String, Double> map = employees.stream()
				.collect(Collectors.groupingBy(Employee::getCity, Collectors.averagingInt(Employee::getAge)));
        //sum
        Map<String, Long> map = employees.stream()
				.collect(Collectors.groupingBy(Employee::getCity, Collectors.summingLong(Employee::getAmount)));
        //Join分组List
        Map<String, String> map = employees.stream().collect(Collectors.groupingBy(Employee::getCity,
Collectors.mapping(Employee::getName, Collectors.joining(", ", "Names: [", "]"))));
    }

3、需要对结果集进行 筛选,去重,排序

Map<String, List<Employee>> map = employees.stream()
    .filter(e->e.getCity.equal("北京"))
    .collect(Collectors.groupingBy(Employee::getCity));


// 对Map按照分组销售总值逆序排序
		Map<String, Long> sortedMap = new LinkedHashMap<>();
		map.entrySet().stream().sorted(Map.Entry.<String, Long>         
  comparingByValue().reversed())
				.forEachOrdered(e -> sortedMap.put(e.getKey(), e.getValue()));
 
		sortedMap.forEach((k, v) -> {
			System.out.println(k + " = " + v);
		});

4、排序与截取前几位的结合

	public void groupingByCity() {
		Map<String, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(Employee::getCity));
     
        Comparator<Employee> byslsj =Comparator.comparing(Employee::getslsj);//时间升序
		
		map.forEach((k, v) -> {
            //按时间升序,并且取第一个值
            v.stream.sorted(bySlsj).limit(1);
			System.out.println(k + " = " + v);
		});
	}

5、map():将流中的元素进行再次加工形成一个新流,流中的每一个元素映射为另外的元素。

int maxHeight = employeeList
                .stream()
                .mapToInt(Employee::getHeight)
                .max()
                .getAsInt();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个高效工作的家伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值