JDK1.8中的流

Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。

話不多說,直接上代碼:

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author: Meng
 * @date: 2020/2/29 11:29 上午
 **/
@Data
public class CallbackVo implements Serializable {

    /**
     * 付款單單號集合
     */
    private List<String> paymentNoList;
    /**
     * 結算系統的結算單號
     */
    private String settleNo;
    /**
     * 毫秒時間戳
     */
    private String settleTime;
    /**
     * SUCCESS/FAIL
     */
    private String settleResult;

    /**
     * 金額
     */
    private int Amount;

}


主程序:

package com.code.study.example.stream;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author: Meng
 * @date: 2020/2/29 11:29 上午
 **/
public class MainTest {

    public final static String SUCCESS = "SUCCESS";

    public final static String FAIL = "FAIL";

    public static void main(String[] args) {
        CallbackVo callbackVo = new CallbackVo();
        List<String> paymentNoList = Arrays.asList("test1","test2","test3");
        callbackVo.setPaymentNoList(paymentNoList);
        callbackVo.setSettleNo("js1234");
        callbackVo.setSettleTime(System.currentTimeMillis()+"");
        callbackVo.setSettleResult(MainTest.SUCCESS);
        callbackVo.setAmount(177);


        CallbackVo callbackVo1 = new CallbackVo();
        List<String> paymentNoList1 = Arrays.asList("no","no2","no3");
        callbackVo1.setPaymentNoList(paymentNoList1);
        callbackVo1.setSettleNo("zftest");
        callbackVo1.setSettleTime(System.currentTimeMillis()+"");
        callbackVo1.setSettleResult(MainTest.FAIL);
        callbackVo1.setAmount(166);

        CallbackVo callbackVo2 = new CallbackVo();
        List<String> pay = Arrays.asList("alal","shss","rer","shanxian");
        callbackVo2.setPaymentNoList(pay);
        callbackVo2.setSettleNo("ma3232");
        callbackVo2.setSettleTime(System.currentTimeMillis()+"");
        callbackVo2.setSettleResult(MainTest.SUCCESS);
        callbackVo2.setAmount(158);


        CallbackVo callbackVo4 = new CallbackVo();
        List<String> paymentNoList4 = Arrays.asList("q","w","e","r");
        callbackVo4.setPaymentNoList(paymentNoList4);
        callbackVo4.setSettleNo("jqtest");
        callbackVo4.setSettleTime(System.currentTimeMillis()+"");
        callbackVo4.setSettleResult(MainTest.FAIL);
        callbackVo4.setAmount(200);

        List<CallbackVo> paramList = new ArrayList<>();
        paramList.add(callbackVo);
        paramList.add(callbackVo1);
        paramList.add(callbackVo2);
        paramList.add(callbackVo4);

        //過濾  篩選集合元素
         List<CallbackVo> callbackVoList = paramList.stream()
//                .filter(t -> !Objects.equals(t.getSettleResult(), MainTest.FAIL))       //改行代碼用於過濾結算結果爲失敗的數據
                 .filter(t -> t.getSettleResult().equals(MainTest.FAIL))        // 和上述代碼效果一致
                 .collect(Collectors.toList());
        System.out.println("callbackVoList:     "+callbackVoList);
        System.out.println("=================================");


        //獲取paramList 中所有settleNo的集合
        List<String> settleNoList = paramList.stream().map(CallbackVo::getSettleNo).collect(Collectors.toList());
        System.out.println("settleNoList:     "+settleNoList);
        System.out.println("=================================");


        //獲取paramList中篩選結算結果爲成功的所有settleNo的集合
        List<String> settleNoSuccessList = paramList.stream()
                .filter(t -> !Objects.equals(t.getSettleResult(), MainTest.FAIL))
//                .map(CallbackVo::getSettleNo)
                .map(a -> a.getSettleNo())      //和上述代碼效果一樣
                .collect(Collectors.toList());
        System.out.println("settleNoSuccessList:     "+settleNoSuccessList);
        System.out.println("=================================");


        //對集合元素進行排序     todo  升序
        List<CallbackVo> callbackSortList = paramList.stream()
                .sorted(Comparator.comparing(CallbackVo::getAmount))
                .collect(Collectors.toList());
        System.out.println("+callbackSortList:     "+callbackSortList);
        System.out.println("=================================");

//      累計求和
        int sum = paramList.stream().mapToInt(t -> t.getAmount()).sum();
        System.out.println("sum:     "+sum);
        System.out.println("=================================");


        //將數組轉換成流
        Integer[] nums = {4,6,8,12,24};
        Stream<Integer> streamArr = Arrays.stream(nums);
        List<Integer> intArr = streamArr.collect(Collectors.toList());
        System.out.println("streamArr:     "+intArr);
        System.out.println("=================================");


        Stream<String> stream = Stream.of("one", "two", "three", "four");
        // 1. 轉換爲數組
//        String[] strArray1 = stream.toArray(String[]::new);
        // 2. 轉換爲集合
//        List<String> list1 = stream.collect(Collectors.toList());
//        List<String> list2 = stream.collect(Collectors.toCollection(ArrayList::new));
//        Set set1 = stream.collect(Collectors.toSet());
//        Stack stack1 = stream.collect(Collectors.toCollection(Stack::new));

        // 3. 轉爲String   todo    list1  list2    str  不能同時測試,因爲這一個流不允許支持3中操作
        String str = stream.collect(Collectors.joining(",")).toString();
//        System.out.println(list1);
//        System.out.println(list2);    //todo   list1和list2輸出一致均爲: [one, two, three, four]
//        System.out.println(str);        //TODO  one,two,three,four
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章