Lambda表达式使用整理总结

Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->”, 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :

左侧 : Lambda 表达式的参数列表;

右侧 : Lambda 表达式中所需执行的功能, 即 Lambda 体;

基本语法:

(parameters) -> expression

(parameters) -> { statements; }

常用示例:

1.forEach遍历List集合

String[] names = {"喵","汪","咩"};  
List nameList =  Arrays.asList(names);  
  
// 旧的循环方式  
for (String name : nameList) {  
     System.out.print(name + "; ");  
}  
  
// 使用 lambda 表达式
nameList.forEach((item) -> System.out.print(item + " ")); 

2.Stream用法

(1).filter过滤

List users = users.stream()
				.filter(user -> "小喵咪".equals(user.getName()))
				.collect(Collectors.toList());

(2).map处理

List nums = Arrays.asList(100, 200, 300, 400, 500);
for (Integer num : nums) {
      num = num + 12;
      System.out.println(num);
}
// 使用 lambda 表达式
List nums = Arrays.asList(100, 200, 300, 400, 500);
nums.stream().map((num) -> num = num + 12)
                      .forEach(System.out::println);

3.使用Lambda排序集合

String[] names = {"喵","汪","咩"};   
   
// 使用匿名内部类排序
Arrays.sort(names, new Comparator() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.compareTo(s2));  
    }  
});
// 使用lambda表达式
Arrays.sort(names, (String s1, String s2) -> (s1.compareTo(s2))); 

4.返回不同类型的处理结果

//返回String
String str = userList.stream()
		.filter(user -> "喵".equals(user.getName()))
        .collect(Collectors.joining(","));

//返回Set
Set names = userList.stream()  
          .filter(user -> "喵".equals(user.getName()))
          .collect(Collectors.toSet());
 
//返回TreeSet
TreeSet names = userList.stream()  
          .filter(user -> "喵".equals(user.getName()))
          .collect(Collectors.toCollection(TreeSet::new));  

5.实现多线程接口

//使用Thread匿名内部类  
new Thread(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world!");  
    }  
}).start();  
  
//使用lambda表达式
new Thread(() -> System.out.println("Hello world!")).start();  
  
  
  
//使用Runnable匿名内部类  
Runnable race1 = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world!");  
    }  
};  
  
//使用lambda表达式
Runnable race2 = () -> System.out.println("Hello world!");

注意事项:

1.lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义);

2.在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

你可能感兴趣的:(java)