JAVA8 - Lambda表達(dá)式的簡單應(yīng)用

JAVA8 - Lambda表達(dá)式的簡單應(yīng)用

前言: JAVA8帶來了很多有趣和高效的新東西,其中Lambda表達(dá)式和函數(shù)式編程應(yīng)該是其中最靚的點(diǎn)了.今天我們來簡單認(rèn)識下 JAVA8-Lambda

首先,我們來看點(diǎn)小知識,平常我們在寫了業(yè)務(wù)流程后,總不可避免的要構(gòu)造一些測試數(shù)據(jù)來驗證我們的代碼.那么,大家在平時工作中學(xué)用的構(gòu)造數(shù)據(jù)的方式都有什么呢,這里我來給大家推薦幾種快速構(gòu)造測試數(shù)據(jù)的小Demo.


public class JavaTest {

/** 測試時,經(jīng)常需要快速初始化一個集合來測試程序. */

// 初始化一個不可變List<Integer>
static List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 5);
// 初始化一個可變List<Integer>
static List<Integer> edIntegers = new ArrayList<>(integers);
// 初始化一個可變Set<Integer>
static Set<Integer> setIntegers = new HashSet<>(integers);
// 另類的快速初始化List<String>
static List<String> strings = new ArrayList<String>() {
    private static final long serialVersionUID = 1L;
    {
        add("abc");
        add("bca");
        add("acb");
    }
};
// 另類快速初始化一個Map<String,Integer>
static Map<String, Integer> ages = new HashMap<String, Integer>() {
    private static final long serialVersionUID = 1L;
    {
        put("HP", 12);
        put("ASUS", 15);
        put("HuaWei", 22);
    }
};
// 另類快速初始化一個List<Map<String,Integer>>
static List<Map<String, Integer>> strAges = new ArrayList<Map<String, Integer>>() {
    {
        add(new HashMap<String, Integer>(){
            {
                put("HP", 12);
                put("ASUS", 15);
                put("HuaWei", 22);
            }
        });
        add(new HashMap<String, Integer>() {
            {
                put("HP", 22);
                put("ASUS", 35);
                put("HuaWei", 42);
            }
        });
        add(new HashMap<String, Integer>() {
            {
                put("HP", 11);
                put("ASUS", 25);
                put("HuaWei", 32);
            }
        });

    }
};

接下來我們來用 Lambda 表達(dá)式來操作這些數(shù)據(jù).

1.我們在測試中對數(shù)據(jù)常用的就是遍歷,我們在測試類中添加如下方法:

/** 資源遍歷 */
private static void each() {
    // 遍歷List測試.
    integers.forEach(System.out::print);// =>1 2 3 4 5 5
    System.out.println();

    edIntegers.forEach(System.out::print);// =>1 2 3 4 5 5
    System.out.println();

    setIntegers.forEach(System.out::print);// =>1 2 3 4 5
    System.out.println();

    strings.forEach(System.out::print);// =>abc bca acb
    System.out.println();

    // 遍歷Map測試
    ages.forEach((key, value) -> {
        System.out.print("{" + key + ":");
        System.out.println(value + "}");
    });// =>{HP:12} {HuaWei:22} {ASUS:15}
}

在main方法中調(diào)用此 each() 方法即可看到上述執(zhí)行結(jié)果.

2.java8 中流的 sorted 排序讓數(shù)據(jù)集的排序變得更簡單明了,同樣我們創(chuàng)建如下方法并在 main方法中調(diào)用 .

/** 資源排序 */
private static void sorted() {
    // List 排序 Comparator.reverseOrder() 是將順序顛倒.
    integers.stream().sorted(Comparator.reverseOrder()).forEach(System.out::print);// =>5 5 4 3 2 1
    System.out.println();

    strings.stream().sorted().forEach(System.out::print);// =>abc acb bca
    System.out.println();

    strings.stream().sorted(Comparator.reverseOrder()).forEach(System.out::print);// =>bca acb abc
    System.out.println();

    // List<Map> 根據(jù)某字段排序
    strAges.stream().sorted((a, b) -> {
        return a.get("HP").compareTo(b.get("HP"));
    }).forEach(x -> {
        System.out.print(x);
    });// =>{HP=11, HuaWei=32, ASUS=25} {HP=12, HuaWei=22, ASUS=15} {HP=22, HuaWei=42, ASUS=35}
}

3. java8中stream的 filter提供了一種簡單的過濾數(shù)據(jù)集得到我們想要的結(jié)果集的方法.

/** 資源過濾 */
private static void filter() {
    // List 過濾
    integers.stream().filter(x -> x.compareTo(2) > -1).forEach(System.out::print);// => 2 3 4 5 5
    System.out.println();

    strings.stream().filter(x -> x.indexOf("a") < 2).forEach(System.out::print);// =>abc acb
    System.out.println();

    // List<Map> 根據(jù)某字段過濾
    strAges.stream().filter(x -> x.get("ASUS").compareTo(20) > 0).forEach(System.out::print);
    // =>{HP=22, HuaWei=42, ASUS=35} {HP=11, HuaWei=32, ASUS=25}
}

4. 有時候我們需要將集合中的數(shù)據(jù)進(jìn)行一定方式處理后返回,以滿足我們的應(yīng)用場景.java8 stream的map可以滿足你的需求.

/** 資源轉(zhuǎn)換 */
private static void transfer() {
    // 取List<Map>中一個字段組成新的List
    List<Integer> ASUS_Ages = strAges.stream().map(x -> x.get("ASUS")).collect(Collectors.toList());
    ASUS_Ages.forEach(System.out::print);// =>15 35 25
    System.out.println();

    // 將List<Integer> 中元素求和
    Integer ages = ASUS_Ages.stream().reduce(0, (a, b) -> a + b);
    System.out.println(ages);// => 75
}

大家看得過癮不? 希望每天都有進(jìn)步哦!

最后附上 main中代碼.

public static void main(String[] args) {
     each();

     sorted();

     filter();

    transfer();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容