本文完整测试代码见文末。

测试数据是List里的4个员工对象实例:

根据员工所在的城市进行分组:

结果分成了三组:

第一组的员工在上海:

第二组的员工在成都:

统计每组员工个数:

把员工进行分组,得分大于101分的在一组,小于等于101的在另一组:

分组结果:

package java8;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.function.Consumer;

import java.util.stream.Collectors;

class Employee {

private String city;

private String name;

private int score;

public Employee(String name, String city, int score){

this.city = city;

this.name = name;

this.score = score;

}

public String getCity(){

System.out.println("city: " + this.city);

return this.city;

}

public String getName() {

return this.name;

}

public int getScore() {

return this.score;

}

@Override

public String toString() {

return String.format("Employee: " + this.name + " city: " + this.city);

}

}

class Person {

private String name;

private int age;

Person(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

return String.format("Person{name='%s', age=%d}", name, age);

}

}

// Jerry 2016-01-15 20:51PM ? 多用于extends generic的type,接受所有Object的sub class

public class StreamTest {

private static void printMap(Map extends Object, ? extends Object> map) {

for(Entry extends Object, ? extends Object> entry:map.entrySet()) {

System.out.println("key = " + entry.getKey() + " , Value = " + entry.getValue());

}

}

public static void main(String[] args) {

ArrayList employees = new ArrayList();

employees.add(new Employee("A", "Shanghai",100));

employees.add(new Employee("B", "Chengdu",101));

employees.add(new Employee("C", "Shenzhen",102));

employees.add(new Employee("D", "Chengdu",104));

// group by City

Map> employeesByCity =

employees.stream().collect( Collectors.groupingBy(Employee::getCity));

// default void forEach(Consumer super T> action) {

for(Map.Entry> entry:employeesByCity.entrySet()) {

System.out.println("key= " + entry.getKey() + " , Value = " + entry.getValue());

entry.getValue().forEach(System.out::println);

}

// 2016-01-15 20:37PM

Consumer aa = a -> { System.out.println("Employee: " + a.getName() + " : " + a.getScore()); };

List chengduEmployee = employeesByCity.get("Chengdu");

chengduEmployee.forEach(aa);

// test for counting

Map employeesByCity2 =

employees.stream().collect( Collectors.groupingBy(Employee::getCity, Collectors.counting()));

printMap(employeesByCity2);

// calculate average score

Map employeesByCity3 =

employees.stream().collect( Collectors.groupingBy(Employee::getCity,

Collectors.averagingInt(Employee::getScore)));

printMap(employeesByCity3);

/*Stream people = Stream.of(new Person("Paul", 24), new Person("Mark", 30), new Person("Will", 28));

Map> peopleByAge = people.collect(groupingBy(p -> p.age, mapping((Person p) -> p.name, toList())));

System.out.println(peopleByAge);*/

/*

* 分区是一种特殊的分组,结果 map 至少包含两个不同的分组——一个true,一个false。

* 例如,如果想找出最优秀的员工,你可以将所有雇员分为两组,一组销售量大于 N,

* 另一组小于 N,使用 partitioningBy 收集器:

*/

System.out.println("partition result");

Map> partitioned =

employees.stream().collect(Collectors.partitioningBy(e -> e.getScore() > 101));

printMap(partitioned);

/*

* 你也可以将 groupingBy 收集器传递给 partitioningBy 收集器来将联合使用分区和分组。例如,你可以统计每个分区中的每个城市的雇员人数:

Map> result =

employees.stream().collect(partitioningBy(e -> e.getNumSales() > 150,

groupingBy(Employee::getCity, counting())));

这样会生成一个二级 Map:

{false={London=1}, true={New York=1, Hong Kong=1, London=1}}

*/

}

}

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

java list 自定义类型转换_使用Java Stream API将List按自定义分组规则转换成Map的一个例子...相关推荐

  1. 使用Java Stream API将List按自定义分组规则转换成Map的一个例子

    本文完整测试代码见文末. 测试数据是List里的4个员工对象实例: 根据员工所在的城市进行分组: 结果分成了三组: 第一组的员工在上海: 第二组的员工在成都: 统计每组员工个数: 把员工进行分组,得分 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java pojo 转 map_如何将POJO对象转换成MAP

    展开全部 很多情况需要将取得的POJO对象转换成其他表现形式,如Key-Value的Map形式,用于数据展现.本文介绍如何e5a48de588b662616964757a686964616f31333 ...

  4. java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序

    在这篇文章中,您将学习如何使用Java对Map按照键或值进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Ja ...

  5. java什么是显示类型转换_【Java的显示转换方法是什么?这种数据类型转换就要这样操作】- 环球网校...

    [摘要]数据类型转换,有助于开发者和用户之间的交流,我希望大家一定要了解Java的显示转换方法是什么?这种数据类型转换就要这样操作,今天小编就带大家看看Java的显示转换方法是什么?这种数据类型转换就 ...

  6. Java的泛型特性_学习Java的重中之重!

    Java的"泛型"特性,你以为自己会了 使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合.反射.泛型.注解等等,这些可以说我们在平时开发中是经常使用到的, ...

  7. java dll 调用方法_关于Java调用dll的方法 | 学步园

    Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C   写好的DLL库时,由于基本数据类型不同.使用字节 ...

  8. java steam reduce_Java 8新特性:Stream API与Date API

    除此之外,Java8 API中包含了很多内建的函数式接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda表达式上.它还提供了很多全新的函数式接口来让工作更加方便,其 ...

  9. java调节音量代码_用Java调用VC音量控制程序_java

    前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...

最新文章

  1. yolov5训练自己的数据集
  2. Unity UGUI 小知识
  3. HGST:中国将成为新云端运算大国
  4. 电子地图开发中栅格模型与矢量模型的区别
  5. 【转】自旋锁及其衍生锁
  6. 位置服务器的操作方法,hpproliantml系列服务器上机架操作方法.doc.docx
  7. matlab提取线条,请问如何将图片中的红色激光线条给提取出来啊,有没有大佬救救孩子,贴出代码给瞅瞅啊!谢谢!...
  8. squid不能启动问题及解决方法
  9. mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
  10. 植树问题python_《程序员的数学》思考题(一)
  11. CWMP(TR069)协议标准学习
  12. JavaScript——利用正则表达式实现二代身份证号码的验证
  13. qq游戏不显示登陆服务器,QQ游戏怎么登陆? qq游戏不能登录怎么办?
  14. 农村物流配送管理如何走出困境?这里有方案
  15. activiti的initiator用法
  16. 全国计算机博弈比赛具体,全国计算机博弈竞赛总则
  17. mysql爱吃鱼油_爱多美鱼油_鱼油_维生素_dha_epa_关节炎_高科技_鳕鱼_痛风_止血_改善记忆力_艾多美鱼油_医疗健康_保健品...
  18. 摩托罗拉ME525搜索键改锁屏键
  19. (自适应手机端)pbootcms响应式企业通用网站模板
  20. iPhone开发系列文章(四)-开发iPhone应用程序(一)

热门文章

  1. MVC架构模式(2)
  2. es中的一些知识点记录
  3. Exchange Server 2016管理系列课件39.新建本地移动请求
  4. static的应用以及静态与非静态的区别
  5. JavaScript 初学者应知的 24 条最佳实践
  6. putty, puttycm区别
  7. 诡异的防火墙故障,能PING通,但访问ORACLE不稳定
  8. Cisco Catalyst 4500
  9. 【新媒体】现阶段新闻聚合的玩法
  10. C# 事件详解附实例分析