专业的JAVA编程教程与资源

网站首页 > java教程 正文

Lambda表达式 中 tomap 详解(lambda表达式代码)

temp10 2024-10-26 15:25:14 java教程 10 ℃ 0 评论

1.tomap 转换 简单数据转换【用于没有重复key值的数据集合】

/**
 *  1.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper) 【用于没有重复key值的数据集合】
 *      1.keyMapper map中key的获取
 *      2.valueMapper map中value值的获取
 */
//注释: 把student中的age当key  student 中的name当 map的value ,如果存在key值相同的舍弃后一条相同的数据取第一条
Map<Integer, String> ageMap = students.stream().collect(Collectors.toMap(item -> item.getAge(), item -> item.getName()));
ageMap.forEach((k, v) -> System.out.println("k=" + k + "--- value=" + v));

/**
 k=18--- value=小王
 k=19--- value=小明
 k=20--- value=小飞
 k=21--- value=小长
 */

2.用于有重复key值的数据集合【常用】

Lambda表达式 中 tomap 详解(lambda表达式代码)

List<Student> students1 = new ArrayList<>();
students1.add(new Student("小王", "北京", 18));
students1.add(new Student("小明", "湖北", 17));
students1.add(new Student("小飞", "深圳", 17));
students1.add(new Student("小长", "湖北", 20));

/**
 *  2.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction) 【用于有重复key值的数据集合】
 *      1.keyMapper map中key的获取
 *      2.valueMapper map中value值的获取
 *      3.mergeFunction 如果有重复数据 合并规则
 *          3.0 通过BinaryOperator<U> mergeFunction 函数从k1,k2中取一个 值作为合并规则
 *          3.1 (k1, k2)->k1) 如果key 相同 保留k1 和k1 value
 *          3.2  (k1, k2)->k2) 如果key相同 保留k2 和k2 value
 *
 */
//注释: 把student中的age当key  student 中的name当 map的value ,如果存在key值相同的舍弃后一条相同的数据取第一条
Map<Integer, String> ageMap1 = students1.stream().collect(Collectors.toMap(item -> item.getAge(), item -> item.getName(), (k1, k2) -> k1));
ageMap1.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));

//注释: 把student中的age当key  student 中的name当 map的value ,如果存在key值相同的 就通过age比较大小 如果age大的就保留
Map<String, Student> nameMap1 = students1.stream().collect(Collectors.toMap(item -> item.getAdress(), item -> item, (k1, k2) -> {
    return Student.compareTo(k1,k2);
}));

nameMap1.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));
/**
 *   k=湖北value=Student(name=小长, adress=湖北, age=20)
 k=深圳value=Student(name=小飞, adress=深圳, age=17)
 k=北京value=Student(name=小王, adress=北京, age=18)
 */

3.用于有重复key值的数据集合,指定map数据类型

/**
 *  3.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction,Supplier<M> mapSupplier) 【用于有重复key值的数据集合,指定map数据类型】
 *      1.keyMapper map中key的获取
 *      2.valueMapper map中value值的获取
 *      3.mergeFunction 如果有重复数据 合并规则
 *          3.0 通过BinaryOperator<U> mergeFunction 函数从k1,k2中取一个或者组成一个加工后的新值 值作为合并规则
 *          3.1 (k1, k2)->k1) 如果key 相同 保留k1 和k1 value
 *          3.2  (k1, k2)->k2) 如果key相同 保留k2 和k2 value
 *      4.mapSupplier 指定具体收集的map类型   LinkedHashMap ConcurrentHashMap 等
 */

//注释: 把student中的age当key  student 中的name当 map的value ,如果存在key值相同的 就通过age比较大小 如果age大的就保留
ConcurrentHashMap<String, Student> nameMap2 = students1.stream().collect(Collectors.toMap(item -> item.getAdress(), item -> item, (k1, k2) -> {
    return Student.compareTo(k1,k2);
}, ConcurrentHashMap::new));

System.out.println("nameMap2 数据类型 为="+ (nameMap2 instanceof ConcurrentHashMap));//nameMap2 数据类型 为=true
nameMap2.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表