专业的JAVA编程教程与资源

网站首页 > java教程 正文

代码简洁利器:java8集合工具_java 集合工具类

temp10 2025-02-21 15:29:38 java教程 16 ℃ 0 评论

工欲善其事必先利其器


代码简洁利器:java8集合工具_java 集合工具类


引言

java8 是革命性的创新,引入了函数式编程,代码编写产生巨大的改变,为我这样的码农带来了很大的便捷性,虽然1.8发布了这么久,但是编码思维上还是半停留在结构式,函数式用的较少,这次也是发现了好玩的工具,简单介绍一下java8,然后分享一下小工具。


java8

简单的来说引入了三大类函数式接口,分别如下:

一、Predicate:接口定义了一个名叫test的抽象方法,它接受泛型 T对象,并返回一个boolean

二、Consumer:定义了一个名叫accept的抽象方法,它接受泛型T 的对象,没有返回(void)


三、Function:接口定义了一个叫作apply的方法,它接受一个 泛型T的对象,并返回一个泛型R的对象

集合操作

在引入了stream流式处理后,我们处理集合不需要反复for循环去处理,在过滤,映射,收集方面增加了更多的便捷性。


我们在频繁操作集合时,便会反复的在stream的一套标准流程,代码看上去并不整洁,然后在网上看到工具封装,打开了思路,封装如下:

只是进行了简单的封装,健壮性方面的考量未做。引入工具后来看下效果

上下两个方格内的功能一样,但是简洁度却不一样。下边的更关注逻辑性,更简洁。上代码

package com.util;

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class Util {

    /** 过滤 */
    public static  List filter(List list, Predicate predicate) {
        return list.stream().filter(predicate).collect(Collectors.toList());
    }

    /** 映射 */
    public static  List map(List list, Function mapper) {
        return list.stream().map(mapper).collect(Collectors.toList());
    }

    /** 过滤和映射 */
    public static  List filterAndMap(List list,
                                              Predicate predicate,
                                              Function mapper) {
        return list.stream().filter(predicate).map(mapper).collect(Collectors.toList());
    }

    /** list 转 map */
    public static  Map toMap(List list, Function mapper) {
        return list.stream().collect(Collectors.toMap(mapper, Function.identity(), (i1, i2) -> i1));
    }

    /** 分组 */
    public static  Map> groupBy(List list, Function mapper) {
        return list.stream().collect(Collectors.groupingBy(mapper, Collectors.toList()));
    }
}


public static void main(String[] args) {


        List list = new ArrayList<>();
        list.add(new User("张三", 12, "红色"));
        list.add(new User("李四", 20, "蓝色"));
        list.add(new User("王五", 19, "红色"));
        list.add(new User("赵六", 17, "蓝色"));
        list.add(new User("钱八", 18, "绿色"));

        // 过滤姓名中有五的用户
        List result = list.stream().filter(item -> item.getName().contains("五")).collect(Collectors.toList());
        // 过滤颜色为红色的用户
        List colorList = list.stream().filter(item -> item.getColor().equals("红色")).collect(Collectors.toList());
        // 根据颜色映射成map
        Map map = list.stream().collect(Collectors.toMap(User::getColor, Function.identity()));

        /************************* 简化版 *********************************/
        List result1 = Util.filter(list, item -> item.getName().contains("五"));
        List result2 = Util.filter(list, item -> item.getColor().equals("红色"));
        Map map1 = Util.toMap(list, User::getColor);
    }

工具封装并不完善,只是提供个简单的思路,希望对小伙伴有所帮助。

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

欢迎 发表评论:

最近发表
标签列表