## List求最大值、最小值、平均值、求和、中位數、屬性排序、去重
```
import org.junit.Test;
import java.text.SimpleDateFormat;
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<User> 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<User> newList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(toList());
// 對象根據年齡屬性降序排序
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(toList());
// 標識升序,再按創建日期降序
// List<BhAnnouncement> 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<Long> 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<User> 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<Long, User> userMap = list.stream().collect(Collectors.toMap(User::getAge, a -> a, (k1, k2) -> k1));
System.out.println(userMap);
//過濾出符合條件的數據
List<User> filterList = list.stream().filter(a -> a.getName().equals("李四")).collect(toList());
System.out.println("filterList:" + filterList);
List<Integer> list2 = Arrays.asList(1, 2, 3, 4, 5);
int sum = list2.stream().reduce(0, (acc, value) -> acc + value);
System.out.println(sum);
List<Integer> result = list2.stream().filter((value) -> value > 2).collect(toList());
result.forEach(System.out::println);
List<String> 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 + "]";
}
}
```
- JDK常用知識庫
- JDK各個版本安裝
- Java8流
- 算法
- 十大排序算法
- 冒泡排序
- 選擇排序
- 插入排序
- 歸并排序
- 快速排序
- 堆排序
- 希爾排序
- 計數排序
- 桶排序
- 基數排序
- 總結
- 常用工具類
- 浮點型計算
- 時間格式處理
- 常用功能點思路整理
- 登錄
- 高并發
- 線程安全的單例模式
- Tomcat優化
- Tomcat之APR模式
- Tomcat啟動過慢問題
- 常用的數據庫連接池
- Druid連接池
- 緩存
- Redis
- SpringBoot整合Redis
- 依賴和配置
- RedisTemplate工具類
- 工具類使用方法
- Redis知識庫
- Redis安裝
- Redis配置參數
- Redis常用Lua腳本
- MongoDB
- SpringBoot操作MongoDB
- 依賴和配置
- MongoDB工具類
- 工具類使用方法
- 消息中間件
- ActiveMq
- SpringBoot整合ActiveMq
- 框架
- SpringBoot
- 定時任務
- 啟動加載
- 事務
- JSP
- 靜態類注入
- SpringSecurity
- Shiro
- 配置及整合
- 登陸驗證
- 權限驗證
- 分布式應用
- SpringMVC
- ORM框架
- Mybatis
- 增
- 刪
- 改
- 查
- 程序員小笑話
- 我給你講一個TCP的笑話吧
- 二進制笑話
- JavaScript的那點東西
- JavaScript內置對象及常見API詳細介紹
- JavaScript實現Ajax 資源請求
- JavaScript干貨
- 架構師成長之路
- JDK源碼解析
- ArrayList源碼解讀
- 設計模式
- 微服務架構設計模式
- 逃離單體煉獄
- 服務的拆分策略
- 全面解析SpringMvc框架
- 架構設計的六大原則
- 并發集合
- JUC并發編程
- 搜索引擎
- Solr
- Solr的安裝
- 分布式服務框架
- Dubbo
- 從零開始學HTMl
- 第一章-初識HTML
- 第二章-認識HTML標簽