import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; /** * 注意:源发行版1.8需要目标发行版1.8所以需要到setting中去设置java compiler * 1.Lambda表达式取代了匿名类,取消了模板,它将允许我们将行为传到函数里,lambda在java中又叫做匿名函数或则闭包 * Lambda方法在编译器内部被翻译成私有方法,并派发 invokedynamic 字节码指令来进行调用 * 2.stream函数式操作流元素集合 */ public class practicejdk8<T> { public static void main(String[] args) { /**********************************lambda表达式************************************/ System.out.println("java泛型" + new practicejdk8<String>().getList()); /** * 1.lamda表达式替换传统的开启线程的方式 */ //传统 new Thread(new Runnable() { public void run() { System.out.println("传统的通过runable实现开启线程的方式"); } }).start(); //jdk8 new Thread(() -> System.out.println("jdk8采用的通过runable开启线程的方式")).start(); /** * 2.lamda表达式进行事件处理,例如swing中的事件监听代码 */ //传统 JButton show = new JButton("showButton"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("传统方式完成事件监听"); } }); //jdk8 show.addActionListener((e) -> { System.out.println("jdk8采用的方式完成事件监听"); }); /** *3.使用lambda表达式对列表进行迭代 */ //传统 List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (Object feature : features) { System.out.print("传统方式遍历集合:" + feature + "\n"); } //jdk8 features.forEach(n -> { System.out.print("jdk8遍历集合:" + n + "\n"); }); /** * 场景4.支持函数式接口Predicate */ List<String> languages = Arrays.asList("Java", "Scala", "C++", "Ha