java stream 操作和 Collectors收集示例

本文详细介绍了Java Stream API中的转换流和终止流操作,通过实例演示如何使用filter(), map(), collect()等方法对用户列表、文章列表进行处理,并展示了Collectors的toList(), groupingBy(), reducing()等收集操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stream 操作

  • 流操作分为转换流和终止流

转换流

  • filter()
  • map
  • limit()
  • distinct()
  • sort()
  • peek()

终止流

  • max()
  • min()
  • count()
  • findAny()
  • anyMatch()
  • reduce()
  • iterator()
  • forEach()
  • collect()

Collectors

Collectors大致有以下几种收集方法

  • toList()
  • toSet()
  • toMap()
  • groupingBy()
  • partitioningBy()
  • averagingInt()
  • summingInt()
  • counting()
  • joining()
  • mapping()

比较实用的收集操作示例

  • 示例1:提供一个用户列表,根据所有用户的姓名拼串拼成如"令狐冲、任盈盈、东方不败;" 这种格式的字符串
  • joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
    这里使用收集器的joining方法,三个参数是终结符、前缀、后缀只填终结符默认前后缀都是空
users.stream().map(User::getUsername).collect(Collectors.joining(";"));
  • 示例2:提供一个用户列表和文章列表,找出所有不是在用户列表中用户写的文章
articles.stream().filter(article -> 
            users.stream().noneMatch(user -> user.getId().equals(article.getUserid())))
            .collect(Collectors.toList());
  • 示例3:提供一个文章列表,根据类型分组文章
 articles.stream().collect(Collectors.groupingBy(Article::getType));

这里有一个小点groupingBy,partitioningBy的区别,大家根据参数和返回值应该能看出来

Map<String, List<Article>> collect1 = articles.stream().collect(Collectors.groupingBy(Article::getType));
Map<Boolean, List<Article>> collect2 = articles.stream().collect(Collectors.partitioningBy(t -> t.getType().equals("1")));
  • 示例4 提供一个文章列表,根据类型分组文章并求每个类型文章对映的浏览量
 Map<String, Integer> map = articles.stream()
            .collect(Collectors.groupingBy(Article::getType, 
            	Collectors.reducing(0, Article::getVisits, Integer::sum)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值