具有多个语句且没有大括号的Lambda表达式的行为

时间:2017-11-30 00:02:59

标签: java lambda

public class A  {
    interface Interface{
        void print();
    }
    public static void main(String[] args) {
        Interface i=()->{System.out.println("1");System.out.println("2");System.out.println("3");System.out.println("4");};
        i.print();
    }
}
output:
1
2
3
4

当我删除这样的花括号时:

public class A  {
    interface Interface{
        void print();
    }
    public static void main(String[] args) {
        Interface i=()->System.out.println("1");System.out.println("2");System.out.println("3");System.out.println("4");
        i.print();
    }
}
output:
2
3
4
1

我知道当我们想要实现多于1个语句时,我们必须使用大括号。当我们删除大括号时,应用程序仍在编译,但我的问题是为什么第二个语句首先执行而第一个语句为最后一个?我找不到任何解释。

2 个答案:

答案 0 :(得分:5)

ReadAllLines()

这些表达式中的大部分都不是lambda的一部分。 Java不会将换行视为重要行,因此这等同于

Dim lines() As String = IO.File.ReadAllLines("....\Toleranz0.txt")
Dim index As Integer = Array.IndexOf(lines, "D6")
If index <> -1 AndAlso index <= lines.Count - 2 Then
    Dim targetLine As String = lines(index + 1)
    ' ... do something with "targetLine" ...
Else
    ' either the line was not found, or there was no line after the found line
End If

现在它更清楚它正在做什么。

答案 1 :(得分:2)

以下是正确格式化后的第二个代码:

y

函数import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame([['item1',2000,1, 2], ['item1',2001,1, 2], ['item1',2002,1, 2], ['item2',2000,1, 2], ['item2',2001,1, 2], ['item2',2002,1, 2]], columns=['mykey', 'year','val1','val2']) grouped = df.groupby('mykey') for name,group in grouped: fig = plt.figure() ax1 = fig.add_subplot(111) group.plot.line(ax=ax1, ylim=[0,3], color='red',x="year",y="val1") ax1.set_ylabel('val1') ax2 = ax1.twinx() group.plot.line(ax=ax2, ylim=[0,3], color='blue',x="year",y="val2") ax2.set_ylabel('val2') plt.title(str(name), fontsize=15) plt.show() 仅分配给public class A { interface Interface{ void print(); } public static void main(String[] args) { Interface i=()->System.out.println("1"); System.out.println("2"); System.out.println("3"); System.out.println("4"); i.print(); } } ,因为没有大括号。

因此,在i()之前,其他语句被调用,即

System.out.println("1")

然后i.print()调用System.out.println("2");System.out.println("3");System.out.println("4");