Java8 lambda表达式10个示例
2017-12-08 11:34
330 查看
package cjj.online.cn; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; import javax.swing.JButton; /** * @author:蔡佳君 * @date:2017年12月7日 下午5:24:53 * @version: * @description: */ public class Threadtest1Lambda { public static void main(String[] args) { // 1. 用lambda表达式实现Runnable // java 8之前 new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8,too much too little to do"); } }).start(); // java 8 Lambda方式 new Thread(() -> System.out .println("In Java8, Lambda expression rocks!!!")).start(); System.out.println("1. ------------------------------"); // 2. 使用Java 8 lambda表达式进行事件处理 // java 8之前 JButton show = new JButton("show"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println( "Event handling without lambda expression is boring"); } }); // java 8之后 show.addActionListener((e) -> { System.out.println( "Light, Camera, Action !! Lambda expressions Rocks"); }); System.out.println("2. ------------------------------"); // 3. 使用lambda表达式对列表进行迭代 // java 8前 List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (String feature : features) { System.out.println(feature); } System.out.println("3. ------------------------------"); // java 8之后 List<String> featrues = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); features.forEach(n -> System.out.println(n)); // java8后得 ::双冒号表示、范围解析操作符现在在Java 8中用来表示方法引用, features.forEach(System.out::println); System.out.println("3. ------------------------------"); // 4. 使用lambda表达式和函数式接口Predicate 把数组转换成List集合Arrays.asList(); System.out.println("4 ------------------------------"); List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); System.out.println("Languages which starts with J :"); // (str) -> ((String) str).startsWith("J") 遍历集合List,并取出首字母包含J的集合项 filter(languages, (str) -> ((String) str).startsWith("J")); System.out.println("Languages which ends with a "); filter(languages, (str) -> ((String) str).endsWith("a")); System.out.println("Print all languages :"); filter(languages, (str) -> true); System.out.println("Print no language : "); filter(languages, (str) -> false); System.out.println("Print language whose length greater than 4:"); filter(languages, (str) -> ((String) str).length() > 4); // 5、如何在lambda表达式中加入Predicate // 甚至可以用and()、or()和xor()逻辑函数来合并Predicate, // 例如要找到所有以J开始,长度为四个字母的名字,你可以合并两个Predicate并传入 System.out.println("5 ------------------------------"); List<String> names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); Predicate<String> startsWithJ = (n) -> n.startsWith("J"); Predicate<String> fourLetterLong = (n) -> n.length() == 4; names.stream().filter(startsWithJ.and(fourLetterLong)) .forEach((n) -> System.out .print("nName, which starts with 'J' and four letter long is : " + n)); System.out.println(); // 6、Java 8中使用lambda表达式的Map和Reduce示例 System.out.println("6.1 ------------------------------"); // 不使用lambda表达式为每个订单加上12%的税 List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); for (Integer cost : costBeforeTax) { double price = cost + .12 * cost; System.out.println(price); } System.out.println("6.1 ------------------------------"); // 使用lambda表达式 List<Integer> costBeforeTax1 = Arrays.asList(100, 200, 300, 400, 500); costBeforeTax1.stream().map((cost) -> cost + .12 * cost) .forEach(System.out::println); // 6.2、Java 8中使用lambda表达式的Map和Reduce示例 System.out.println("6.2 ------------------------------"); // 为每个订单加上12%的税 // 老方法: List<Integer> costBeforeTax2 = Arrays.asList(100, 200, 300, 400, 500); double total = 0; for (Integer cost : costBeforeTax2) { double price = cost + .12 * cost; total = total + price; } System.out.println("Total : " + total); // 新方法:reduce 接收多个值并返回一个值 // Java中Arrays的asList()方法 可以将 数组转为List 但是,这个数组类型必须是 引用类型的 System.out.println("6.2 ------------------------------"); List<Integer> costBeforeTax3 = Arrays.asList(100, 200, 300, 400, 500); double bill = costBeforeTax3.stream().map((cost) -> cost + .12 * cost) .reduce((sum, cost) -> sum + cost).get(); System.out.println("Total : " + bill); // 7. 创建一个字符串列表,每个字符串长度大于2 // collect()操作会把其接收的元素聚集(aggregate)到一起(这里是List), // collect()方法的参数则被用来指定如何进行聚集操作。在这里我们使用toList()以把元素输出到List中。 // filter()有一种遍历的意思 System.out.println("7 ------------------------------"); List<String> strList = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); List<String> filtered = strList.stream().filter(x -> x.length() > 10) .collect(Collectors.toList()); System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered); // 8、对列表的每个元素应用函数 // 将字符串换成大写并用逗号链接起来 System.out.println("8 ------------------------------"); List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.", "Canada"); String G7Countries = G7.stream().map(x -> x.toUpperCase()) .collect(Collectors.joining(", ")); System.out.println(G7Countries); // 9、复制不同的值,创建一个子列表 // 利用流的 distinct() 方法来对集合进行去重 // 用所有不同的数字创建一个正方形列表 System.out.println("9 ------------------------------"); List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4); List<Integer> distinct = numbers.stream().map(i -> i * i).distinct() .collect(Collectors.toList()); System.out.printf( "Original List : %s, Square Without duplicates : %s %n", numbers, distinct); // 10、计算集合元素的最大值、最小值、总和以及平均值 // 获取数字的个数、最小值、最大值、总和以及平均值 System.out.println("10------------------------------"); List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29); IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x) .summaryStatistics(); System.out.println("Highest prime number in List : " + stats.getMax()); System.out.println("Lowest prime number in List : " + stats.getMin()); System.out.println("Sum of all prime numbers : " + stats.getSum()); System.out.println( "Average of all prime numbers : " + stats.getAverage()); } public static void filter(List names, Predicate condition) { names.stream().filter((name) -> (condition.test(name))) .forEach((name) -> { System.out.println(name + " "); }); } }
相关文章推荐
- Java8 lambda表达式10个示例
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java之Lambda表达式10个示例
- Java8 lambda表达式10个示例
- Java8 lambda表达式10个示例