目录
1.lambda是什么?
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
需要注意的是lambda表达式需要函数式接口来接收。接口添加了@FunctionalInterface注解。
2.语法
语法如下
参数根据需要,可填可不填
返回值:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
(parameters) ->{ statements; }
//如果只有一条语句,可以去掉大括号
(parameters) -> expression
3.表达式实例
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
4.demo
public class java8Test {
static class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String args[]) throws ExecutionException, InterruptedException, TimeoutException {
User u1 = new User();
u1.setName("zhangsan");
u1.setAge(10);
User u2 = new User();
u2.setName("lisi");
u2.setAge(20);
List<User> list = new ArrayList<>();
list.add(u1);
list.add(u2);
//foreach
list.forEach(
user -> {
System.out.println("用户年龄:" + user.getAge());
}
);
//filter
List<User> collect = list.stream().filter(user ->
10 == user.getAge()
).collect(Collectors.toList());
System.out.println("过滤之后的数据量:" + collect.size());
//listToMap
Map<String, User> userMap = list.stream().collect(
Collectors.toMap(key -> key.getName(), value -> value)
);
System.out.println("从userMap获取zhangsan的数据:" + userMap.get("zhangsan").toString());
//listToMap
Map<String, Integer> map = list.stream().collect(
Collectors.toMap(User::getName, User::getAge)
);
System.out.println("map:" + map.toString());
//线程
Thread thread = new Thread(() -> {
System.out.println("创建新线程");
});
thread.start();
//线程并拿返回结果
FutureTask futureTask = new FutureTask(()->{
System.out.println("正在执行线程");
Thread.sleep(3000);
return "线程执行完了";
});
Thread thread2 = new Thread(futureTask);
thread2.start();
Object result = futureTask.get(5, TimeUnit.SECONDS);
System.out.println(result);
//线程池
ThreadPoolExecutor pool = new ThreadPoolExecutor(10,20,60,TimeUnit.SECONDS,new LinkedBlockingQueue<>(),new ThreadPoolExecutor.AbortPolicy());
Future future = pool.submit(()->{
System.out.println("正在执行线程--");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "线程池执行任务完了";
});
Object o= future.get();
System.out.println(o.toString());
pool.shutdown();
}