import java.util.*;
import java.util.stream.Collectors;
import static java.util.Comparator.comparingLong;
import static java.util.stream.Collectors.*;
* @Author:
* @Date: 2018/12/12 13:08
* @Description:
public class test {
public static void main(String[] args) {
List
list = new ArrayList<>();
list.add(new User(21L, "张三"));
list.add(new User(25L, "李四"));
list.add(new User(22L, "王五"));
list.add(new User(19L, "赵柳"));
list.add(new User(32L, "王5"));
list.add(new User(29L, "王6"));
list.add(new User(21L, "王7"));
// 对象根据年龄属性升序排序
List newList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(toList());
// 对象根据年龄属性降序排序
List newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(toList());
// 标识升序,再按创建日期降序
// List newList = announcementList.stream().sorted(Comparator.comparing(BhAnnouncement::getReadFlag).thenComparing(BhAnnouncement::getSendTime).reversed()).collect(toList());
// list遍历
newList.forEach(System.out::println);
// 平均数
double asDouble = list.stream().mapToLong(User::getAge).average().getAsDouble();
System.out.println("average:" + asDouble);
double avg = list.stream().collect(Collectors.averagingLong(User::getAge));
System.out.println("average:" + avg);
// 最大值
long asLong = list.stream().mapToLong(User::getAge).max().getAsLong();
System.out.println("max:" + asLong);
// 最小值
long asLong1 = list.stream().mapToLong(User::getAge).min().getAsLong();
System.out.println("min:" + asLong1);
// 求和
long sum1 = list.stream().mapToLong(User::getAge).sum();
System.out.println("sum:" + sum1);
// 提取对象属性生成list
List ids = list.stream().map(User::getAge).collect(toList());
System.out.println(ids);
// list升序排序
Collections.sort(ids);
System.out.println(ids);
// 生成中位数
Long j;
if (ids.size() % 2 == 0) {
j = (ids.get(ids.size() / 2 - 1) + ids.get(ids.size() / 2)) / 2;
System.out.println("中位数为" + j);
} else {
j = ids.get(ids.size() / 2);
System.out.println("中位数为" + j);
// list倒序排序
ids.sort(Comparator.reverseOrder());
System.out.println(ids);
// 去重
List users = list.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new));
System.out.println("去重:"+users);
* List -> Map
* 需要注意的是:toMap 如果集合对象有重复的key,会报错Duplicate key ....
* apple1,apple12的id都为1。可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
Map userMap = list.stream().collect(Collectors.toMap(User::getAge, a -> a, (k1, k2) -> k1));
System.out.println(userMap);
//过滤出符合条件的数据
List filterList = list.stream().filter(a -> a.getName().equals("李四")).collect(toList());
System.out.println("filterList:" + filterList);
List list2 = Arrays.asList(1, 2, 3, 4, 5);
int sum = list2.stream().reduce(0, (acc, value) -> acc + value);
System.out.println(sum);
List result = list2.stream().filter((value) -> value > 2).collect(toList());
result.forEach(System.out::println);
List result2 = list2.stream().map(value -> String.format("String:%s", value)).collect(toList());
result2.forEach(System.out::println);
// 用于收集统计数据的状态对象,例如count,min,max,sum和平均。
IntSummaryStatistics stats = list2.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("Max : " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Sun: " + stats.getSum());
System.out.println("Average : " + stats.getAverage());
System.out.println("Count : " + stats.getCount());
System.out.println("toString : " + stats.toString());
class User {
private Long age;
private String name;
public User(Long i, String s) {
this.age = i;
this.name = s;
public Long getAge() {
return age;
public void setAge(Long age) {
this.age = age;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + "]";
import
java
.util.Comparator;
import
java
.util.Map;
import
java
.util.concurrent.ConcurrentHashMap;
import
java
.util.function.Function;
import
java
.util.function.Predicate;
import
java
想象一下如果以前的
Java
写法针对
List
与Map容器类相互转换,特定
属性
的排重,集合元素
排序
,过滤筛选,删除元素,奇偶性判断,返回限制的个数……之类的操作,第一步就是需要写for循环,把每个元素遍历出来,再做自己逻辑操作。
这里抛开以前在for循环里面写代码的固化思维,减少一点for,简化代码,如何写得更加简洁?
首先创建今天的主角类:Zoo,类
属性
很简单:id和name
public class Zoo {
private int id;
private String name;
Java
查找
List
中的最大值、
最小值
java
>
List
<Long>
list
= new Array
List
();
java
.util.
List
<
java
.lang.Long>
list
= []
java
>
list
.add(1L)
java
.lang.Boolean res1 = true
java
>...
Java
8集合
List
排序
、筛选1.
List
1.1 Array
List
1.2 Linked
List
1.3 Array
List
和Linked
List
比较1.4
List
过滤指定元素1.4.1 准备待测试的
List
1.4.2 使用Iterator遍历
List
1.4.2 使用
Java
8对
List
过滤筛选1.5 使用
Java
8对
List
排序
1.5.1 单个字段
排序
1.5.2 多个字段组合
排序
1.6 Li...
stream的min,max,findFirst,findAny操作,我们先看下函数的定义
Optional<T> min(Comparator<? super T> comparator);
Optional<T> max(Comparator<? super T> comparator);
Optio...
点击上方关注订阅黑码教主获取更多精彩内容
Java
8统计
list
中指定
属性
的最大、最小、
平均值
、
求和
使用方式:
list
.stream().mapToDouble(Student1::getScore).sum()//和
list
.stream().mapToDouble(Student1::getScore).max()//最大
list
.stream().mapToDouble(Student1::g...
//过滤掉需要判断最大值
属性
的值为空的数据
//过滤掉需要判断最大值
属性
的值为空的数据
upgradeDevDto
List
= upgradeDevDto
List
.stream().filter(e -> e.getEndUpgradeTime() != null).collect(Collectors.to
List
());
//Optional类是一个可以为n
点击上方关注订阅黑码教主获取更多精彩内容
Java
8统计
list
中指定
属性
的最大、最小、
平均值
、
求和
使用方式:
list
.stream().mapToDouble(Student1::getScore).sum()//和
list
.stream().mapToDouble(Student1::getScore).max()//最大
list
.stream().mapToDouble(Student1::g...