java stream多条件排序_java8 新特性 Stream流 分组 排序 过滤 多条件去重

private static List list = 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());

}

这可能是史上最好的 Java8 新特性 Stream 流教程

本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

Java8新特性 Stream流式思想&lpar;二&rpar;

如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

java8 新特性Stream流的应用

作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

Java8新特性 Stream流式思想&lpar;一&rpar;

遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...

Java8新特性 Stream流式思想&lpar;三&rpar;

Stream接口中的常用方法 forEach()方法package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods; import jav ...

Java8新特性——stream流

一.基本API初探 package java8.stream; import java.util.Arrays; import java.util.IntSummaryStatistics; impo ...

Java8 新特性 Stream&lpar;&rpar; API

新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

Java8 新特性 Stream 无状态中间操作

无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

Java8 新特性 Stream 非短路终端操作

非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

随机推荐

linux时间时区设置

用linux的时候大家可能会遇到时间不对,时区不对的情况.比如使用网上廉价的国外的linux的vps,时区是国外的.那么如何在不劳烦管理员的情况下自己动手呢?首先要了解硬件时钟与系统时钟,计算机上的B ...

position绝对剧中

function loginH(){ var loginH = $('.sign-main-bg .sign-main-content'); var h = loginH.height(); logi ...

不同车型 不同起步价不同费用的问题(switch语句)

#include "stdio.h" #include "math.h" main() { int a; float meet,b; printf(" ...

Pycharm配置anaconda环境

概述 在上节介绍了anaconda管理python环境,而Pycharm作为主流python IDE,两者配合使用才算完美. 配置 File - Setting - Project Interpret ...

匿名内部类中使用的外部局部变量为什么只能是final变量

被匿名内部类引用的变量会被拷贝一份到内部类的环境中 但其后,在外部,该变量如果被修改,则内部外部不一致 Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final的局部变量的限制. 究其原 ...

&sol;etc&sol;profile、~&sol;&period;bash&lowbar;profile、~&sol;&period;bashrc和&sol;etc&sol;bashrc

文件 引用关系 执行时间 影响用户 使用场景 /etc/profile   开机执行 所有用户 所有用户.重启生效 ~/.bash_profile 引用~/.bashrc 用户登录时执行 当前用户 当 ...

【bug】安卓浏览器键盘输入改变弹出层的定位

bug描述 在安卓浏览器中,有一个在页面底部的弹出层表单,样式如下: .popup { position: absolute; bottom: 0; } 当在这个弹出层输入内容,键盘自动弹出,弹出层的 ...

Java NIO API详解(转)

原文连接: http://www.blogjava.net/19851985lili/articles/93524.html 感谢原作者 NIO API 主要集中在 java.nio 和它的 subp ...

redis和mecache和ehcache的特点

最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考! Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中 ...

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值