Java8 新特性 Steam() 中間有狀態操作


中間有狀態操作

Java8 新特性 Stream 練習實例

  中間操作,就是把數據處理成自己想要的類型,並且有狀態操作,是在所有的數據基礎上進行操作的。比如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
         */


細節決定成敗!
個人愚見,如有不對,懇請扶正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM