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

这篇具有很好参考价值的文章主要介绍了Java使用Stream API对于数据列表经常处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java使用Stream API对于数据列表经常处理,庖丁解牛,java,开发语言

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)等。您可以根据需求,在您的项目中融合使用这些方法来处理数据。如果有具体的问题或需求,欢迎继续向我提问。文章来源地址https://www.toymoban.com/news/detail-540489.html

到了这里,关于Java使用Stream API对于数据列表经常处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java通过stream流的形式把列表中某个字段的值取出并生成列表

    可以使用Java 8中引入的Stream API来实现这一功能。例如,假设你有一个类名为Person的列表,并且你想要从这个列表中提取所有人的姓名并生成一个新的列表。你可以这样做: 这段代码首先使用 stream() 方法将列表转换为流。然后,使用 map() 方法对流中的每个元素执行一个转换函

    2024年02月12日
    浏览(33)
  • java用stream根据实体的某个属性对列表进行排序

    用stream流根据实体的某个属性对列表进行排序 假设有一个实体类 Person,包含两个属性 name 和 age,你可以使用 stream 流的 sorted() 方法来按照某两个字段进行排序。以下是一个示例代码: 在上述代码中,我们将 personList 转换成流后,调用了 sorted() 方法,并且使用 Comparator 的

    2024年02月06日
    浏览(33)
  • 【Java系列】深入解析Stream API

    你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记论点 蓝色 :用来标记论点 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 Stream API是Java 8中最

    2024年02月10日
    浏览(29)
  • Java 8:Stream API 流式操作

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据; 这种风格将要处理的元素集合看

    2024年02月13日
    浏览(33)
  • Java 8:Stream API 流式操作(学习)

    Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据; 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进

    2024年02月10日
    浏览(35)
  • 使用Java的stream().filter方法进行数据筛选

    在Java中,Stream是一个非常强大的工具,用于处理集合数据。Stream提供了一系列的操作,使我们能够轻松地对数据进行筛选、转换和处理。其中, filter 方法是Stream中的一个关键操作,它允许我们根据给定的条件筛选出符合条件的元素。 在本文中,我们将深入探讨Java中 Stream

    2024年02月07日
    浏览(41)
  • java8 列表通过 stream流 根据对象属性去重的三种实现方法

    0、User对象 1、使用filter进行去重 测试 ①、疑惑 既然 filter 里面调用的是 distinctPredicate 方法,而该方法每次都 new 一个新的 map 对象,那么 map 就是新的,怎么能做到可以过滤呢 ②、解惑 先看一下 filter 的部分实现逻辑,他使用了函数式接口 Predicate ,每次调用filter时,会使用

    2024年01月20日
    浏览(49)
  • Java8 Stream分组groupBy后,取单一字段值、取列表第一个值方式

    java8 Stream中groupBy的拓展用法。 取单一字段值、取列表第一个值方式

    2024年02月14日
    浏览(28)
  • Java Stream中的API你都用过了吗?

    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 在本教程中,您将通过大量示例来学习 Java 8 Stream API。 Java 在 Java 8 中提供了一个新的附加包,称为 java.util.stream 。该包由类、接口和枚举组成,允许对元素进行函数式操作。 您可以通过在

    2024年02月05日
    浏览(55)
  • Java 8 中的 Stream API - map() 方法详解

    摘要: Java 8 中的 Stream API 提供了一种新的处理集合和数组的方式,可以使代码更加简洁、易读,同时还可以提高性能。其中 map() 方法是比较常用的方法之一,它可以将 Stream 对象中的每个元素映射为另一个元素。本文将对 Java 8 中的 Stream API 和 map() 方法进行详细介绍,并通

    2024年04月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包