Java 8:Lambda表达式包含多个语句/逻辑

时间:2016-07-24 09:28:24

标签: java list lambda java-8

我编写了一个简单的程序,使用java 8 lambda迭代doctype html div(#menu class="ui dropdown icon item")

List

在下面的程序中,我在lambda中执行了两个以上的逻辑。我面临的问题是如何更新第四条路,即import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class FirstLamdaExpression { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); //Way 1 : old way list.forEach(new Consumer<Integer>() { @Override public void accept(Integer t) { System.out.print(t + " "); } }); //Way 2 System.out.println(" "); list.forEach((Integer t) -> System.out.print(t + " ")); //Way 3 System.out.println(" "); list.forEach((t) -> System.out.print(t + " ")); //Way 4 System.out.println(" "); list.forEach(System.out::print); } }

System.out::print

2 个答案:

答案 0 :(得分:5)

您似乎在询问如何将t + " Twice is : " + t*2 + " , "传递给方法参考。您不能将显式参数传递给方法引用,也不能将方法引用与lambda表达式结合使用。

您可以使用Stream管道首先map tt的每个值打印任何内容,而不是使用forEach方法参考打印它:

list.stream().map(t -> t + "  Twice is : " + t*2 + "  , ").forEach(System.out::print);

答案 1 :(得分:4)

代码中的第四种方法是方法引用。您不能将它应用于多个语句,甚至不能应用于接受多个参数的方法。我在这里唯一能想到的是将此登录提取到一个方法:

public class SecondLamdaExpression {
    public static void main(String[] args) {    
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // First three ways not repeated here

        // Way 4
        System.out.println(" ");
        list.forEach(SecondLamdaExpression::printTwice);
    }

    private static void printTwice(Integer t) {
        System.out.print(t + "  Twice is : ");
        System.out.print(t*2 + "  , ");
    }
}