->是lambda表达式,Java8新特性,它的作用是简化匿名函数
虽说我们可以不用这种写法,但还是需要了解->的作用,因为可能别人是这样写的;接下来我们通过几个例子了解一下。
例子:线程
1 2 3 4 5 6 7 8 9 10 //Before Java 8: new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8 "); } }).start(); //Java 8 way: new Thread( () -> System.out.println("In Java8!") ).start();
例子:排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Before Java 8 private void sortUsingJava7(List<String> names){ Collections.sort(names, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); } // Java 8 way: private void sortUsingJava8(List<String> names){ Collections.sort(names, (s1, s2) -> s1.compareTo(s2)); }
例子:监听器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Before Java 8: JButton show = new JButton("Show"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("without lambda expression is boring"); } }); // Java 8 way: show.addActionListener((e) -> { System.out.println("Action !! Lambda expressions Rocks"); });
通过上面例子可以看到,->的作用就是将匿名函数用->代替,匿名函数如果有输入参数,比如compare(String s1, String s2),则用(s1,s2)来表示;如果没有输入参数,则用()来表示,然后->后面写处理结果。
总结公式:(输入参数)->(输出参数)