百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

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

ztj100 2025-05-30 19:01 34 浏览 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);
    }

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

相关推荐

作为后端开发,你知道MyBatis有哪些隐藏的 “宝藏” 扩展点吗?

在互联网大厂后端开发领域,MyBatis作为一款主流的持久层框架,凭借其灵活的配置与强大的数据处理能力,广泛应用于各类项目之中。然而,随着业务场景日趋复杂、系统规模不断扩张,开发过程中常面临SQL...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板-基础框架-分布式架构-开源项目-持续集成-自动化部署-系统监测-无缝升级的全方位J2EE企业级开发解...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

Mybatis Plus框架学习指南-第三节内容

自动填充字段基本概念MyBatis-Plus提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。原理...

被你误删了的代码,在 IntelliJ IDEA中怎么被恢复

在IntelliJIDEA中一不小心将你本地代码给覆盖了,这个时候,你ctrl+z无效的时候,是不是有点小激动?我今天在用插件mybatisgenerator自动生成mapper的时候,...

修改 mybatis-generator 中数据库类型和 Java 类型的映射关系

使用mybatis-generator发现数据库类型是tinyint(4),生成model时字段类型是Byte,使用的时候有点不便数据库的类型和Model中Java类型的关系...

又被问到了, java 面试题:反射的实现原理及用途?

一、反射的实现原理反射(Reflection)是Java在运行时动态获取类的元数据(如方法、字段、构造器等)并操作类对象的能力。其核心依赖于...

Spring Boot 中JPA和MyBatis技术那个更好?

你在进行SpringBoot项目开发时,是不是也经常在选择JPA和MyBatis这两个持久化技术上犯难?面对众多前辈的经验之谈,却始终拿不准哪种技术才最适合自己的项目?别担心,今天咱们就...

Spring Boot (七)MyBatis代码自动生成和辅助插件

一、简介1.1MyBatisGenerator介绍MyBatisGenerator是MyBatis官方出品的一款,用来自动生成MyBatis的mapper、dao、entity的框架,让...

解决MyBatis Generator自动生成.java.1文件

MyBatis框架操作数据库,一张表对应着一个实体类、一个Mapper接口文件、一个Mapper映射文件。一个工程项目通常最少也要几十张表,那工作量可想而知非常巨大的,MyBatis框架替我们想好了解...

Linux yq 命令使用详解

简介yq是一个轻量级、可移植的命令行...

7 段不到 50 行的 Python 脚本,解决 7 个真实麻烦:代码、场景与可复制

“...

Python学不会来打我(62) json数据操作汇总

很多小伙伴学了很久的python一直还是没有把数据类型之间的转换搞明白,上一篇文章我们详细分享了python的列表、元组、字典、集合之间的相互转换,这一篇文章我们来分享json数据相关的操作,虽然严格...

之前3W买的Python全系列教程完整版(懂中文就能学会)

今天给大家带来了干货,Python入门教程完整版,完整版啊!完整版!言归正传,小编该给大家介绍一下这套教程了,希望每个小伙伴都沉迷学习,无法自拔...

x-cmd pkg | grex - 正则表达式生成利器,解决手动编写的烦恼

简介grex是一个旨在简化创作正则表达式的复杂且繁琐任务的库和命令行程序。这个项目最初是DevonGovett编写的JavaScript工具regexgen的Rust移植。但re...

取消回复欢迎 发表评论: