高效 告别996,开启java高效编程之门 3-8实战:常用中间操作演示之:遍历/排序

1    重点

peek方法的使用

sorted方法的使用

reversed方法的使用

peek案例(无状态中间操作与forEach结合使用)  和  sorted案例(有状态中间操作与forEach结合使用)打印日志的区别

2    实战演示之peek:
package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSONObject;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * StreamOperator
 * 作用:演示各种流的操作
 * @author 魏豆豆
 * @date 2020/4/11
 */
public class StreamOperator {

    private List<Sku> list;
    /**
     * 初始化购物车车
     */
    @Before
    public void init(){
        list = CartService.getSkuList();
    }


    /**
     * filter的方法使用
     *
     * 过滤出只有书籍的商品并进行打印
     */
    @Test
    public void filterTest(){
        list.stream()
                //filter方法:如果条件为true则保留,否则过滤掉
                .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * map方法的使用
     *
     * 找出购物车中所有商品的名称并进行打印
     */
    @Test
    public void mapTest(){
        list.stream()
                .map(sku -> sku.getSkuName())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * flatMap方法的使用:将一个对象转换成一个流
     *
     * 找出购物车所有的商品名称并进行打印
     */
    @Test
    public void flatMap(){
        list.stream()
                //注意:flatMap是对源处理为Stream流之后才能继续操作
                .flatMap(sku -> Arrays.stream(sku.getSkuName().split("")))
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * peek方法使用:
     */
    @Test
    public void peek(){
        list.stream()
                .peek((Sku)->System.out.println(Sku.getSkuName()))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                //peek操作是中间操作,操作完后,流仍然可以使用,forEach是终端操作,操作后,流不能再被使用
                //无状态的操作+终端操作(peek案例),就会从上到下依次执行,但是有状态的操作(sortTest案例),会先汇总,汇总之后,再循环;具体的区别通过peek案例和sortTest打印日志查看
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }


    @Test
    public void sortTest(){
        list.stream()
                .peek(Sku->System.out.println(Sku.getSkuName()))
                //有reversed 反序从大到小 ,无reversed 正序从小到大
                //sorted 有状态
                .sorted(Comparator.comparing(Sku::getTotalPrice).reversed())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

}

打印日志:

无人机
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020001,
    "skuName":"无人机",
    "skuPrice":999.0,
    "totalNum":1,
    "totalPrice":999.0
}
T-shirt
{
    "skuCategory":"CLOTHING",
    "skuId":2020002,
    "skuName":"T-shirt",
    "skuPrice":50.0,
    "totalNum":2,
    "totalPrice":100.0
}
人生的枷锁
{
    "skuCategory":"BOOKS",
    "skuId":2020003,
    "skuName":"人生的枷锁",
    "skuPrice":30.0,
    "totalNum":1,
    "totalPrice":30.0
}
老人与海
{
    "skuCategory":"BOOKS",
    "skuId":2020004,
    "skuName":"老人与海",
    "skuPrice":20.0,
    "totalNum":1,
    "totalPrice":20.0
}
剑指高效编程
{
    "skuCategory":"BOOKS",
    "skuId":2020005,
    "skuName":"剑指高效编程",
    "skuPrice":288.0,
    "totalNum":1,
    "totalPrice":288.0
}
大头皮鞋
{
    "skuCategory":"CLOTHING",
    "skuId":2020006,
    "skuName":"大头皮鞋",
    "skuPrice":300.0,
    "totalNum":1,
    "totalPrice":300.0
}
杠铃
{
    "skuCategory":"SPROTS",
    "skuId":2020007,
    "skuName":"杠铃",
    "skuPrice":2000.0,
    "totalNum":1,
    "totalPrice":2000.0
}
ThinkPad
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020008,
    "skuName":"ThinkPad",
    "skuPrice":5000.0,
    "totalNum":1,
    "totalPrice":5000.0
}

Process finished with exit code 0
3    实战演示之排序(sorted):
package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSONObject;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * StreamOperator
 * 作用:演示各种流的操作
 * @author 魏豆豆
 * @date 2020/4/11
 */
public class StreamOperator {

    private List<Sku> list;
    /**
     * 初始化购物车车
     */
    @Before
    public void init(){
        list = CartService.getSkuList();
    }


    /**
     * filter的方法使用
     *
     * 过滤出只有书籍的商品并进行打印
     */
    @Test
    public void filterTest(){
        list.stream()
                //filter方法:如果条件为true则保留,否则过滤掉
                .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * map方法的使用
     *
     * 找出购物车中所有商品的名称并进行打印
     */
    @Test
    public void mapTest(){
        list.stream()
                .map(sku -> sku.getSkuName())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * flatMap方法的使用:将一个对象转换成一个流
     *
     * 找出购物车所有的商品名称并进行打印
     */
    @Test
    public void flatMap(){
        list.stream()
                //注意:flatMap是对源处理为Stream流之后才能继续操作
                .flatMap(sku -> Arrays.stream(sku.getSkuName().split("")))
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * peek方法使用:
     */
    @Test
    public void peek(){
        list.stream()
                .peek((Sku)->System.out.println(Sku.getSkuName()))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                //peek操作是中间操作,操作完后,流仍然可以使用,forEach是终端操作,操作后,流不能再被使用
                //无状态的操作+终端操作(peek案例),就会从上到下依次执行,但是有状态的操作(sortTest案例),会先汇总,汇总之后,再循环;具体的区别通过peek案例和sortTest打印日志查看
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }


    @Test
    public void sortTest(){
        list.stream()
                .peek(Sku->System.out.println(Sku.getSkuName()))
                //有reversed 反序从大到小 ,无reversed 正序从小到大
                //sorted 有状态
                .sorted(Comparator.comparing(Sku::getTotalPrice).reversed())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

}

打印日志:

无人机
T-shirt
人生的枷锁
老人与海
剑指高效编程
大头皮鞋
杠铃
ThinkPad
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020008,
    "skuName":"ThinkPad",
    "skuPrice":5000.0,
    "totalNum":1,
    "totalPrice":5000.0
}
{
    "skuCategory":"SPROTS",
    "skuId":2020007,
    "skuName":"杠铃",
    "skuPrice":2000.0,
    "totalNum":1,
    "totalPrice":2000.0
}
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020001,
    "skuName":"无人机",
    "skuPrice":999.0,
    "totalNum":1,
    "totalPrice":999.0
}
{
    "skuCategory":"CLOTHING",
    "skuId":2020006,
    "skuName":"大头皮鞋",
    "skuPrice":300.0,
    "totalNum":1,
    "totalPrice":300.0
}
{
    "skuCategory":"BOOKS",
    "skuId":2020005,
    "skuName":"剑指高效编程",
    "skuPrice":288.0,
    "totalNum":1,
    "totalPrice":288.0
}
{
    "skuCategory":"CLOTHING",
    "skuId":2020002,
    "skuName":"T-shirt",
    "skuPrice":50.0,
    "totalNum":2,
    "totalPrice":100.0
}
{
    "skuCategory":"BOOKS",
    "skuId":2020003,
    "skuName":"人生的枷锁",
    "skuPrice":30.0,
    "totalNum":1,
    "totalPrice":30.0
}
{
    "skuCategory":"BOOKS",
    "skuId":2020004,
    "skuName":"老人与海",
    "skuPrice":20.0,
    "totalNum":1,
    "totalPrice":20.0
}

Process finished with exit code 0

 

猜你喜欢

转载自www.cnblogs.com/1446358788-qq/p/12742039.html