中間有狀態操作
中間操作,就是把數據處理成自己想要的類型,並且有狀態操作,是在所有的數據基礎上進行操作的。比如dictinct(去重),sorted(排序)....
所有的有狀態操作:
去重 distinct
跳過 skip
截斷 limit
排序 sorted
去重 distinct
//找出所有的對象的類型
@Test
public void test1() {
list.stream()
//找出所有的對象的類型
.map(Sku::getSkuCategory)
//然后去重
.distinct()
.forEach(System.out::println);
}
/*
ELECTRONICS
CLOTHING
SPORTS
BOOKS
*/
跳過 skip
/**
* 跳過 skip
*/
@Test
public void test2() {
//沒有過濾
list.stream()
.forEach(item -> System.out.println(
JSON.toJSONString(
item.getSkuId(), true)));
long count = list.stream().count();
System.out.println("總共有" + count + "個對象");
//跳過 skip
list.stream()
//跳過前7個
.skip(7)
.forEach(item -> System.out.println(
JSON.toJSONString(
item.getSkuId(), true)));
/**
* 輸出的結果:
* 100001
* 100002
* 100003
* 100004
* 100005
* 100006
* 100007
* 100008
* 100009
* 總共有9個對象
* 100007
* 100008
* 從1開始,到第7個開始獲取
*/
}
截斷 limit
/**
* 截斷 limit
*/
@Test
public void limitTest() {
list.stream()
//截斷
.limit(1)
//輸出
.forEach(item ->
System.out.println(
JSON.toJSONString(item,true)));
/**
* 只截斷了第一個
* 剩下來的全部都丟棄
* "skuCategory":"ELECTRONICS",
* "skuId":100001,
* "skuName":"無人機",
* "skuPrice":4999.0,
* "totalNum":1,
* "totalPrice":4999.0
*
*/
}
排序 sorted
/**
* sorted 排序
*/
@Test
public void sortedTest() {
List<Double> collect = list.stream()
//排序
.sorted(Comparator.comparing(Sku::getSkuPrice))
//映射成只有價格
.map(Sku::getSkuPrice)
//把經果收集成價格列表
.collect(Collectors.toList());
//循環輸出出來
collect.forEach(System.out::println);
/**
* //價格升序排列,倒序排列:reversed 在 comparing 加上去
* 78.2
* 79.8
* 85.5
* 149.0
* 409.0
* 528.0
* 2299.0
* 2699.0
* 4999.0
*/
細節決定成敗!
個人愚見,如有不對,懇請扶正!