天天看点

Java Lambda表达式例子



        正如C#之父Anders Hejlsberg在那篇文章 编程语言大趋势 中所讲,未来的编程语言将逐渐融合各自的特性,而不存在单纯的声明式语言(如之前的Java)或者单纯的函数编程语言。将来声明式编程语言借鉴函数编程思想,函数编程语言融合声明式编程特性。

//	    实现Runnable线程案例
			// 使用() -> {} 替代匿名类:
			System.out.println("=== RunnableTest ===");
			// Anonymous Runnable
			Runnable r1 = new Runnable() {
				@Override
				public void run() {
					System.out.println("Hello world one!");
				}
			};
			// Lambda Runnable
			Runnable r2 = () -> System.out.println("Hello world two!");
			// Run em!
			r1.run();
			r2.run();
		
		new Thread(() -> System.out.println("In Java8!")).start();
           
//		使用Lambda表达式对字符串第一个取大写并连接
		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);
           
// 使用Lambda表达式遍历List集合

		// Prior Java 8 :
		List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
		for (String feature : features) {
			// System.out.println(feature);
		}

		// In Java 8:print,out
		features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
		features.forEach(n -> System.out.print(n));

		// Even better use Method reference feature of Java 8
		// method reference is denoted by :: (double colon) operator
		// looks similar to score resolution operator of C++
		features.forEach(System.out::println);
           
// 使用Stream的distinct()方法过滤集合中重复元素。
		// Create List of square of all distinct numbers
		List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4, 3);
		List<Integer> distinct = numbers.stream().map(i -> i).distinct().collect(Collectors.toList());
		System.out.printf("Original List : %s,  Square Without duplicates :%s %n", numbers, distinct);
           
// 计算List中的元素的最大值,最小值,总和及平均值
		// Get count, min, max, sum, and average for numbers
		List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, -1);
		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());