簡體   English   中英

Lambda Expression無效,終止

[英]Lambda Expression is not working, getting terminated

使用lambda表達式編寫了java8程序,它沒有被執行,而是在lambda表達式中終止,沒有例外

    import java.util.ArrayList;
    import java.util.List;
    import java.util.function.BiConsumer;

    public class BiConsumerTest {


    public static void main(String[] args) {
        try{


        List<String> list1 = new ArrayList<String>();

        list1.add("A");
        list1.add("B");
        list1.add("V");


    List<String> list2 = new ArrayList<String>();

        list2.add("J");
        list2.add("G");
        list2.add("P");

        BiConsumer<List<String>  , List<String>> bc = (lista, listb) ->{
                lista.stream().forEach( System.out::print);

            };


        }catch(Exception ex){
            ex.printStackTrace();
        }

    }

}

預計會在列表中打印字符串

這是因為你沒有調用BiConsumeraccept方法。 稱之為:

  bc.accept(list1, list2);

此外,請注意,不必調用stream只是為了調用forEach而是直接在列表上調用forEach

 lista.forEach(System.out::print);

另一件事是你的BiConsumer不使用第二個列表,這可能是因為你還沒有完成整個邏輯的實現,在這種情況下它是可以理解的。

完整代碼:

BiConsumer<List<String>, List<String>> bc = (lista, listb) -> {
    lista.forEach(System.out::print);
    // listb.forEach(System.out::print);
};
bc.accept(list1, list2);

您目前剛剛定義了功能接口,要進一步執行它,您需要在代碼中調用實現。 在您的情況下,為此,您需要將BiConsumer.accept方法稱為:

bc.accept(list1, list2);

然后執行操作,你已經定義了。 正如其Javadoc所述

對給定的參數執行此操作。


另一方面,如果我建議,您可能只是打算(至少)打印您正在使用的兩個列表:

BiConsumer<List<String>, List<String>> biConsumer = (lista, listb) -> {
    lista.forEach(System.out::print);
    listb.forEach(System.out::print);
};
biConsumer.accept(list1, list2);

它將作為輸出ABVJGP打印。

(來自評論)這可以進一步寫成:

BiConsumer<List<String>, List<String>> biConsumer =
                      (lista, listb) -> Stream.concat(lista.stream(), listb.stream())
                                              .forEach( System.out::print);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM