java list 自定义类型转换_使用Java Stream API将List按自定义分组规则转换成Map的一个例子...
本文完整测试代码见文末。
测试数据是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的一个例子...相关推荐
- 使用Java Stream API将List按自定义分组规则转换成Map的一个例子
本文完整测试代码见文末. 测试数据是List里的4个员工对象实例: 根据员工所在的城市进行分组: 结果分成了三组: 第一组的员工在上海: 第二组的员工在成都: 统计每组员工个数: 把员工进行分组,得分 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java pojo 转 map_如何将POJO对象转换成MAP
展开全部 很多情况需要将取得的POJO对象转换成其他表现形式,如Key-Value的Map形式,用于数据展现.本文介绍如何e5a48de588b662616964757a686964616f31333 ...
- java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序
在这篇文章中,您将学习如何使用Java对Map按照键或值进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Ja ...
- java什么是显示类型转换_【Java的显示转换方法是什么?这种数据类型转换就要这样操作】- 环球网校...
[摘要]数据类型转换,有助于开发者和用户之间的交流,我希望大家一定要了解Java的显示转换方法是什么?这种数据类型转换就要这样操作,今天小编就带大家看看Java的显示转换方法是什么?这种数据类型转换就 ...
- Java的泛型特性_学习Java的重中之重!
Java的"泛型"特性,你以为自己会了 使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合.反射.泛型.注解等等,这些可以说我们在平时开发中是经常使用到的, ...
- java dll 调用方法_关于Java调用dll的方法 | 学步园
Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C 写好的DLL库时,由于基本数据类型不同.使用字节 ...
- java steam reduce_Java 8新特性:Stream API与Date API
除此之外,Java8 API中包含了很多内建的函数式接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda表达式上.它还提供了很多全新的函数式接口来让工作更加方便,其 ...
- java调节音量代码_用Java调用VC音量控制程序_java
前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...
最新文章
- yolov5训练自己的数据集
- Unity UGUI 小知识
- HGST:中国将成为新云端运算大国
- 电子地图开发中栅格模型与矢量模型的区别
- 【转】自旋锁及其衍生锁
- 位置服务器的操作方法,hpproliantml系列服务器上机架操作方法.doc.docx
- matlab提取线条,请问如何将图片中的红色激光线条给提取出来啊,有没有大佬救救孩子,贴出代码给瞅瞅啊!谢谢!...
- squid不能启动问题及解决方法
- mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
- 植树问题python_《程序员的数学》思考题(一)
- CWMP(TR069)协议标准学习
- JavaScript——利用正则表达式实现二代身份证号码的验证
- qq游戏不显示登陆服务器,QQ游戏怎么登陆? qq游戏不能登录怎么办?
- 农村物流配送管理如何走出困境?这里有方案
- activiti的initiator用法
- 全国计算机博弈比赛具体,全国计算机博弈竞赛总则
- mysql爱吃鱼油_爱多美鱼油_鱼油_维生素_dha_epa_关节炎_高科技_鳕鱼_痛风_止血_改善记忆力_艾多美鱼油_医疗健康_保健品...
- 摩托罗拉ME525搜索键改锁屏键
- (自适应手机端)pbootcms响应式企业通用网站模板
- iPhone开发系列文章(四)-开发iPhone应用程序(一)