JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

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

wys521 2024-12-01 09:22:50 精选教程 22 ℃ 0 评论

工欲善其事必先利其器



引言

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 <T> List<T> filter(List<T> list, Predicate<? super T> predicate) {
        return list.stream().filter(predicate).collect(Collectors.toList());
    }

    /** 映射 */
    public static <T, R> List<R> map(List<T> list, Function<? super T, ? extends R> mapper) {
        return list.stream().map(mapper).collect(Collectors.toList());
    }

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

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

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


public static void main(String[] args) {


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

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

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

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

欢迎 发表评论:

最近发表
标签列表