一 lambda表达式

一:入门

以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修饰

猜你喜欢

转载自blog.csdn.net/u012224510/article/details/84634393