Java使用Stream API对于数据列表经常处理

news2024/9/23 9:35:34

在这里插入图片描述

Java使用Stream API对于数据列表经常处理

先提供一些简单到复杂的常见例子,您可以根据这些例子进行进一步的开发和学习:

数据过滤筛选操作

  1. 查询表中所有数据:
List<User> users = userDao.getAllUsers();
  1. 根据条件查询单个结果:
Optional<User> user = userDao.getUserById(userId);
  1. 根据条件查询多个结果,并取前几条:
List<User> topUsers = userDao.getTopUsersByScore(10);
  1. 对查询结果进行排序:
List<User> sortedUsers = userDao.getAllUsers()
    .stream()
    .sorted(Comparator.comparing(User::getScore))
    .collect(Collectors.toList());
  1. 过滤符合条件的结果:
List<User> filteredUsers = userDao.getAllUsers()
    .stream()
    .filter(user -> user.getAge() >= 18)
    .collect(Collectors.toList());
  1. 对查询结果进行分页:
int pageSize = 10;
int pageNum = 1;
List<User> pageUsers = userDao.getAllUsers()
    .stream()
    .skip((pageNum - 1) * pageSize)
    .limit(pageSize)
    .collect(Collectors.toList());
  1. 对查询结果进行统计:
long totalUserCount = userDao.getAllUsers().stream().count();
  1. 对查询结果进行求和:
int totalScores = userDao.getAllUsers()
    .stream()
    .mapToInt(User::getScore)
    .sum();
  1. 对查询结果进行分组:
Map<Integer, List<User>> ageGroup = userDao.getAllUsers()
    .stream()
    .collect(Collectors.groupingBy(User::getAge));
  1. 对查询结果进行去重:
List<String> distinctNames = userDao.getAllUsers()
    .stream()
    .map(User::getName)
    .distinct()
    .collect(Collectors.toList());

数据进行计算筛选

  1. 计算一个整数列表中所有偶数的和:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.stream()
                .filter(n -> n % 2 == 0)
                .mapToInt(Integer::intValue)
                .sum();
System.out.println("偶数之和:" + sum);
  1. 统计一个字符串列表中每个单词出现的次数:
List<String> words = Arrays.asList("apple", "banana", "orange", "apple", "banana", "apple");
Map<String, Long> wordCounts = words.stream()
                .flatMap(word -> Arrays.stream(word.split("\\s+")))
                .collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
System.out.println("单词出现次数:" + wordCounts);
  1. 将一个整数列表按照指定的规则进行分组:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Map<Integer, List<Integer>> groupedNumbers = numbers.stream()
                .collect(Collectors.groupingBy(n -> (n - 1) % 3));
System.out.println("分组结果:" + groupedNumbers);
  1. 对一个用户列表按照年龄进行降序排序:
List<User> users = Arrays.asList(new User("Alice", 25), new User("Bob", 30), new User("Cathy", 20));
users.sort((u1, u2) -> u2.getAge() - u1.getAge());
System.out.println("按年龄降序排序的用户列表:" + users);
  1. 对一个字符串列表进行去重操作:
List<String> uniqueWords = Arrays.asList("apple", "banana", "orange", "apple", "banana").stream()
                .distinct()
                .collect(Collectors.toList());
System.out.println("去重后的字符串列表:" + uniqueWords);
  1. 对一个整数列表进行前N个最大值的筛选:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int N = 3;
List<Integer> topNMaxValues = numbers.stream()
                .limit(N)
                .max(Comparator.naturalOrder())
                .collect(Collectors.toList());
System.out.println("前N个最大值:" + topNMaxValues);
  1. 对一个整数列表进行前N个最小值的筛选:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int N = 3;
List<Integer> topNMinValues = numbers.stream()
                .limit(N)
                .min(Comparator.naturalOrder())
                .collect(Collectors.toList());
System.out.println("前N个最小值:" + topNMinValues);
  1. 对一个整数列表进行前N个平均值的筛选:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int N = 3;
double sum = numbers.stream()
                .limit(N)
                .reduce(0L, (a, b) -> a + b); // 先计算总和再除以N得到平均值
List<Double> topNAverageValues = numbers.stream()
                .limit(N)
                .mapToDouble(Integer::intValue) // 将整数转换为浮点数进行计算平均值
                .sorted() // 按升序排序后取前N个平均值作为结果列表的元素
                .collect(Collectors.toList());
System.out.println("前N个平均值:" + topNAverageValues);

方法融合

我可以给您一个示例,展示如何在Java Stream中融合使用不同的方法:

假设有一个User类,包含name(姓名)、age(年龄)和score(分数)属性。我们使用Java Stream来对一组User对象进行操作。

List<User> users = ... // 获取User列表

// 示例1: 过滤、排序并限制结果数量
List<String> names = users.stream()
    .filter(user -> user.getAge() >= 18) // 过滤年龄大于等于18岁的用户
    .sorted(Comparator.comparing(User::getScore).reversed()) // 按照分数降序排序
    .limit(5) // 限制结果数量为5个
    .map(User::getName) // 提取姓名字段
    .collect(Collectors.toList());

System.out.println(names); // 打印结果

// 示例2: 分组、求和、统计
Map<Integer, Long> ageCountMap = users.stream()
    .collect(Collectors.groupingBy(User::getAge, Collectors.counting())); // 按照年龄分组并统计数量

int totalScore = users.stream()
    .mapToInt(User::getScore) // 转换成IntStream
    .sum(); // 求和

System.out.println(ageCountMap);
System.out.println(totalScore);

// 示例3: 映射、去重
Set<String> uniqueNames = users.stream()
    .map(User::getName) // 提取姓名字段
    .distinct() // 去重
    .collect(Collectors.toSet()); // 转换为Set集合

System.out.println(uniqueNames);

// 示例4: 并行处理
int totalAge = users.parallelStream()
    .mapToInt(User::getAge)
    .sum();

System.out.println(totalAge);

以上示例展示了不同的Stream方法的融合应用,如过滤(filter)、排序(sorted)、限制(limit)、映射(map)、分组(groupingBy)、求和(sum)、去重(distinct)等。您可以根据需求,在您的项目中融合使用这些方法来处理数据。如果有具体的问题或需求,欢迎继续向我提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别测了,背锅上线!

三百六十行&#xff0c;行行都背锅。 用例千万条&#xff0c;质量第一条。 流程不规范&#xff0c;亲人两行泪&#xff01; 每次上线后多多少少都有些问题&#xff0c;每次的项目总结会总会生产一口新锅&#xff0c;等着你我他来背&#xff0c;这不又要上线了&#xff0c;这次…

华为OD机试真题 Java 实现【快递投放问题】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 一、题目描述 有N个快递站点用字符串标识&#xff0c;某些站点之间有道路连接。每个站点有一些包裹要运输&#xff0c;每个站点间的包裹不重复&#xff0c;路上有检查站会导致部分货物无…

基于kubernetes组件初步部署k8s

基于k8s组件初步部署k8s kubernetes组件kubernetes简单化部署安装Master操作环境检查安装配置Containerd安装Containerd配置containerd启动containerd 配置Circtl安装配置Kubeadm安装Kubeadmkubeadm配置启动kubelet服务 拉取镜像初始化集群操作命令行 安装网络插件 Node操作Nod…

Dubbo分布式服务框架,springboot+dubbo+zookeeper

一Dubbo的简易介绍 1.Dubbo是什么&#xff1f; Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需…

N天爆肝数据库——MySQL(1)

数据库概念理解 数据库 DB 存储数据的仓库 数据库管理系统 DBMS 操纵和管理数据库的大型软件 SQL 操作关系型数据库的编程语言&#xff0c;定义了用一套操作关系型数据库同意标准 学习 SQL 的作用 SQL 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统。S…

在北京买房究竟需要多少钱?

无论是来北京前&#xff0c;还是来北京后&#xff0c;每每提起北京的房价&#xff0c;大家都会说出三个字「买不起」。 确实&#xff0c;北京房价非常贵&#xff0c;但是究竟「贵」到什么程度&#xff0c;我们却无法说出一个数。 几年前&#xff0c;我研三还没毕业时&#xf…

Linux高频常用指令汇总

目录 认识 Linux 目录结构 绝对路径&#xff1a;以根目录开头的, 称为绝对路径 相对路径&#xff1a;不是根目录开头的,称为相对路径 ls pwd cd mkdir touch cat echo rm cp mv vim编辑器 1、进入文件 2、进行编辑模式 3、保存退出 重要的几个热键[Tab],[ct…

SpringBoot中间件——封装限流器

背景 通常能知道一个系统服务在正产增速下流量大小&#xff0c;扩容与压测也是基于此。若有突发或者恶意攻击访问&#xff0c;都要将流量拦截在外。这部分功能不属于业务侧&#xff0c;它是通用非业务的共性需求&#xff0c;所以我们将共性抽取为限流中间件。 方案设计 图解&…

基于微信小程序的高校食堂点餐系统设计与实现(Java+spring boot+MySQL+微信小程序)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的高校食堂点餐系统设计与实现&#xff08;Javaspring bootMySQL微信小程序&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java…

指针-->笔试题(必备)

前言&#xff1a; 目录 前言&#xff1a; 本章介绍的指针笔试题是有点难度的&#xff0c;得花费一点时间来理解&#xff0c;并且我们在做题目的时候需要画图来理解。 文章目录 笔试题1 笔试题2 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 笔试题8 笔试题1 int main() {int a[5…

uniapp下载和上传照片

利用uniapp开发的时候&#xff0c;需要下载和上传照片&#xff0c;在H5和微信小程序中的写法不一样。 H5环境下 浏览器中下载就是模拟超链接下载。也不需要获取什么权限&#xff0c;比较简单。 // #ifdef H5 this.isLoading true; let oA document.createElement("a&…

[软件工具]姓氏谐音梗随机生成工具使用教程

首先我们打开软件 输入姓氏和生成数即可开始生成&#xff0c;注意生成数可以随便填&#xff0c;软件会自动按最大数生成&#xff0c;比如你设置生成数位10000则可能只会生成500个&#xff0c;因为软件内置只有这么多。单次生成不重复&#xff0c;生成效果可以访问视频教程&…

MySQL多表查询练习

多表连接查询 use mydb3; -- 创建部门表 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 );-- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), --…

数仓建设中最常用模型--Kimball维度建模详解

数仓建模首推书籍《数据仓库工具箱&#xff1a;维度建模权威指南》&#xff0c;本篇文章参考此书而作。文章首发公众号&#xff1a;五分钟学大数据&#xff0c;公众号后台发送“维度建模”即可获取此书籍第三版电子书 先来介绍下此书&#xff0c;此书是基于作者 60 多年的实际业…

leetcode:174. 地下城游戏:动态规划法

174. 地下城游戏 - 力扣&#xff08;Leetcode&#xff09; 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初…

史上最全Windows下VScode配置大全

文章目录 1、安装Vscode下载安装配置C和中文 2、安装MinGW-w643、检查是否配置成功 1、安装Vscode 下载安装 首先先下载VSCODE&#xff1a; 链接: VScode下载 下载好安装包以后&#xff0c;直接在自己指定目录安装&#xff1a; 配置C和中文 打开VScode的左下角位置&#…

Proteus 8.13安装教程

不涉及版权问题。 1、双击“Proteus 8.13 SP0 Pro.exe”开始安装 2、按照安装向导进行操作&#xff0c;等待安装成功 1&#xff09;选择“Browse"自定义安装路径&#xff0c;再点击&#xff1a;Next 2&#xff09;点击&#xff1a;Next 3&#xff09;等待一段时间&#xf…

C#学习之路-判断

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 语句描述if …

闪烁灯光门铃电路设计

闪烁灯光门铃不仅具有门铃的声音还可以通过家里的门灯发出闪烁的灯光&#xff0c;适合用于室内嘈杂环境时使用&#xff0c;也适用于有聋哑人的家庭。 一、电路工作原理 电路原理如图 30 所示。 由基本的门铃电路和灯光、声音延迟控制电路两部分组成。按下门铃按钮 SB&#x…

C语言每日一题之旋转数求最小值

hello&#xff0c;今天我们分享一道题目&#xff0c;是牛客网上的一道题 求旋转数组中的最小值https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId13&tqId23269&ru/ta/coding-interviews&qru/ta/coding-interviews/question-ranking 那我…