Lambda 表达式的定义及用法:
Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得
名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函
数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)
在java 8中,lambda表达是只有一个抽象方法的接口。(本质使用的,是接口中的那个抽象方
法,使用lambda表达式来实现)。
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数(函数式接口)作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑,有效避免内部匿名类出现。
练习数字排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Jk {
public static void main(String[] args) {
// 数字的小数排序
List<Double> list1= new ArrayList<>(List.of(10d, 20d,30d,401d,100d,12d));
// 不排序
System.out.println("list1");
// 升序
Collections.sort(list1);
System.out.println(list1);
// 降序
Collections.sort(list1,(a, b) ->(int)(b-a));
System.out.println(list1);
// 乱序
Collections.shuffle(list1);
Collections.shuffle(list1);
System.out.println(list1);
// 整数排序
List<Integer> list2= new ArrayList<>(List.of(10,20,30,11,34));
// 不排序
System.out.println(list2);
// 升序
Collections.sort(list2);
System.out.println(list2);
// 降序
Collections.sort(list2,(a,b)->b-a);
System.out.println(list2);
// 乱序
Collections.shuffle(list2);
Collections.shuffle(list2);
Collections.shuffle(list2);
System.out.println(list2);
}
}
输出结果:
练习字符串排序:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
public class Bds1 {
public static void main(String[] args) {
String[] langs = {"java","javascript","python","go","c"};
System.out.println(Arrays.toString(langs));
// 升序 Arrays 工具类.sort()静态方法
Arrays.sort(langs);
System.out.println(Arrays.toString(langs));
// 降序
// Arrays.sort(langs,(a, b) -> b.compareTo(a));
Arrays.sort(langs, Comparator.reverseOrder());
System.out.println(Arrays.toString(langs));
// 乱序
Random rand = new Random();
Arrays.sort(langs,(a, b)-> rand.nextBoolean() ? 1:-1);
Arrays.sort(langs,(a, b)-> rand.nextBoolean() ? 1:-1);
System.out.println(Arrays.toString(langs));
}
}
输出结果:
流技术Stream
定义:Java 8 版本新增的Stream,配合同版本出现的Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream流是JDK8新增的成员,允许以声明性方式处理数据集合,可以把Stream流看作是遍历数据集合的一个高级迭代器。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找/筛选/过滤、排序、聚合和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。
简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
面试题
要求:计算1+2+3+…+100=?(不使用循环递归)
import java.util.stream.IntStream;
public class Bds2 {
public static void main(String[] args) {
// 使用循环
int s = 0;
for (int i = 0; i <= 100; i++) s += i;
System.out.println("1+2+3+...+100 =" + s);
// 使用递归
int ss = sum(100);
System.out.println("1+2+3+...+100=" + ss);
// 使用IntStream
int s3 = IntStream.rangeClosed(1, 100).sum();
System.out.println("1+2+3+...+100=" + s3);
IntStream s4 = IntStream.rangeClosed(1, 100).filter(e -> e > 50 && e % 2 == 0).map(e -> e + 1);
System.out.println(s4.sum());\\求出50到100偶数之和
}
public static int sum(int i) {
if (i > 0) {
return i + sum(--i);
}
return 0;
}
}
输出结果: