一:入门
以swing的button的单击事件为例,传统的单击事件写法如下,关注加粗字体:
public static void main(String[] args) {
JFrame jFrame = new JFrame("my JFrame");
JButton jButton = new JButton("My JButton");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("您单击了按钮");
}
});
jFrame.add(jButton);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
以上的代码,在事件监听器中,我们关心的需耀的是 就是这个:System.out.println(“您单击了按钮”);
其他都属多余,在java8中,可以使用lamdba使用,
public static void main(String[] args) {
JFrame jFrame = new JFrame("my JFrame");
JButton jButton = new JButton("My JButton");
jButton.addActionListener(event -> {System.out.println("您单击了按钮");});
jFrame.add(jButton);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
二: java8深入剖析
2.1: 将数据逐个打印的各种方式
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
System.out.println("-------------------第一种方式----------------");
for(int i = 0 ; i < list.size() ; i++){
System.out.println(i);
}
System.out.println("-------------------第二种方式----------------");
list.forEach(i -> {System.out.println(i);});
System.out.println("-------------------将字母全都变成大写----------------");
List<String> list1 = Arrays.asList("hello" , "world" , "hello world");
System.out.println("-------------------传统方式----------------");
for(int i = 0 ; i < list1.size() ; i++){
System.out.println(list1.get(i).toUpperCase());
}
System.out.println("-------------------lambda方式----------------");
list1.forEach((item) -> {System.out.println(item.toUpperCase());});
List<String> list2 = new ArrayList<>();
list2.forEach(item -> {System.out.println(item);});
list1.forEach(item -> {list2.add(item.toUpperCase());});
list2.forEach(item -> {System.out.println("---"+ item);});
2.2 lambda表达式基础语法:
java8中引入新的操作符 “ ->” (箭头操作符)。该操作符分成两部分:
左侧: lambda表达式的参数列表
右侧:表中是需要执行的功能体
语法格式:
无参 无返回
()->System.out.println();
以线程启动为例:
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("线程启动");
}
};
r1.run();
System.out.println(r1.getClass().getName());
Runnable r2 = () -> System.out.println("线程启动1");
r2.run();
System.out.println(r2.getClass().getName());
Runnable r3 = () ->{};
r3.run();
System.out.println(r3.getClass().getName());
2.3: lambda表达式需要函数接口的支持
1: 方法中只有一个抽象方法,可以用Functionaliterface修饰