java8 新特性 Stream流 分组 排序 过滤 多条件去重
发布日期:2021-11-15 14:57:39
浏览次数:27
分类:技术文章
本文共 4257 字,大约阅读时间需要 14 分钟。
java8 新特性 Stream流 分组 排序 过滤 多条件去重
public class Streams { private static Listlist = new ArrayList (); public static void main(String[] args) { list = Arrays.asList( new User(1, "a", 10), new User(4, "d", 19), new User(5, "e", 13), new User(2, "b", 14), new User(3, "a", 10), new User(6, "f", 16) ); long start = System.currentTimeMillis(); order(); println(String.format("耗时[%s]毫秒", (System.currentTimeMillis() - start))); } /** * 多条件去重 * @param list */ public static void order() { list.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>( Comparator.comparing(o -> o.getAge() + ";" + o.getName()))), ArrayList::new)).forEach(u -> println(u)); } public static void group() { Map > collect = list.stream().collect(Collectors.groupingBy(User::getAge)); System.out.println(collect); } /** * filter过滤 * @param list */ public static void filterAge() { list.stream().filter(u -> u.getAge() == 10).forEach(u -> println(u)); } /** * sorted排序 */ public static void stord() { list.stream().sorted(Comparator.comparing(u-> u.getAge())).forEach(u -> println(u)); } /** * limit方法限制最多返回多少元素 */ public static void limit() { list.stream().limit(2).forEach(u -> println(u)); } /** * 不要前多n个元素,n大于满足条件的元素个数就返回空的流 */ public static void skip() { list.stream().skip(2).forEach(u -> println(u)); } // 最大值 最小值 public static void statistics() { Optional min = list.stream().min(Comparator.comparing(User::getUserId)); println(min); Optional max = list.stream().max(Comparator.comparing(User::getUserId)); println(max); } // 统计 public static void summarizingInt(){ IntSummaryStatistics statistics = list.stream().collect(Collectors.summarizingInt(User::getAge)); double average = statistics.getAverage(); long count = statistics.getCount(); int max = statistics.getMax(); int min = statistics.getMin(); long sum = statistics.getSum(); println(average); println(count); println(min); println(sum); println(max); } /** * 转set */ public static void toSet() { Set collect = list.stream().collect(Collectors.toSet()); Iterator iterator = collect.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next().getUserId()); } } /** * 转map */ public static void toMap() { Map collect = list.stream().collect(Collectors.toMap(User::getUserId, u -> u)); for (Integer in : collect.keySet()) { User u = collect.get(in);//得到每个key多对用value的值 println(u); } } /** *map */ public static void map() { list.stream().map(User::getUserId).forEach(userId -> println(userId)); list.stream().mapToInt(User::getAge).forEach(userId -> println(userId)); list.stream().mapToDouble(User::getUserId).forEach(userId -> println(userId)); list.stream().mapToLong(User::getUserId).forEach(userId -> println(userId)); } /** * 查找与匹配 * allMatch方法与anyMatch差不多,表示所有的元素都满足才返回true。noneMatch方法表示没有元素满足 */ public static void anyMatch() { boolean anyMatch = list.stream().anyMatch(u -> u.getAge() == 100); boolean allMatch = list.stream().allMatch(u -> u.getUserId() == 10); boolean noneMatch = list.stream().noneMatch(u -> u.getUserId() == 10); println(anyMatch); println(allMatch); println(noneMatch); } /** * reduce操作 */ public static void reduce() { Optional sum = list.stream().map(User::getAge).reduce(Integer::sum); Optional max = list.stream().map(User::getAge).reduce(Integer::max); Optional min = list.stream().map(User::getAge).reduce(Integer::min); println(sum); println(max); println(min); } /** * 公共输出 * @param c */ public static void println(Object c) { System.out.println(c.toString()); } static class User { private Integer userId; private String name; private Integer age; User(Integer userId, String name, Integer age) { super(); this.userId = userId; this.name = name; this.age = age; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "[userId=" + userId + ", name=" + name + ", age=" + age + "]"; } }
转载地址:https://blog.csdn.net/qq_39739458/article/details/84970293 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月15日 15时18分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
转:【答学员问】有什么经验教训,是你在面试很多次之后才知道的?
2019-04-27
消息队列:解耦、异步、削峰,现有MQ对比以及新手入门该如何选择MQ?
2019-04-27
【奇技淫巧】-- 三角形最小路径和
2019-04-27
【小技巧】argc和argv的用法
2019-04-27
学不下去了怎么办?
2019-04-27
二叉树的前中后序遍历(迭代法)(带动画)
2019-04-27
【小技巧】【XShell】【Xftp】Windows桌面与Linux虚拟机互传文件
2019-04-27
【redis入门】Centos下安装redis
2019-04-27
【redis入门】redis安装后相关知识串讲
2019-04-27
【redis】来吧,展示一下redis 发布-订阅模式
2019-04-27
当下热点词再学:redis缓存预热、更新、降级,限流
2019-04-27
【redis6.0.6】redis源码慢慢学,慢慢看 -- 第五天:adlist
2019-04-27
别抖,OK? 操作系统抖动现象、网络抖动与延迟、函数抖动之防抖与节流,串讲
2019-04-27
通过域名获取主机IP -- struct addrinfo
2019-04-27
【C++】算法集锦(8):从两数和问题拓展到一百数和问题
2019-04-27
【C++】算法集锦(9):背包问题
2019-04-27
【C++】算法集锦(10)通俗讲kmp算法
2019-04-27