lambda表达式

Lambda表达式
基本语法:
(parameters) -> expression

(parameters) ->{ statements; }

 

下面是Java lambda表达式的简单例子:
// 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) 

 

1.使用lambda表达式遍历集合
List<String> name =Arrays.asList( new String[] {"Mike","Jack"});
List<String> lowername= name.stream().map(e -> {return e.toLowerCase();}).collect(Collectors.toList());
lowername.forEach(System.out::println);
  
List<String> name2 =Arrays.asList( new String[] {"Mike","Jack"});
List<String> lowername2= name2.stream().map(e -> e.toLowerCase()).collect(Collectors.toList());
lowername.forEach(lname->System.out.println(lname));

 

2.使用lambda来实现 Runnable接口
// 2.1使用匿名内部类 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
        System.out.println("Hello world !"); 
    } 
}).start(); 
 
// 2.2使用 lambda expression 
new Thread(() -> System.out.println("Hello world !")).start(); 
 
// 2.3使用匿名内部类 
Runnable race1 = new Runnable() { 
    @Override 
    public void run() { 
        System.out.println("Hello world !"); 
    } 
}; 
 
// 2.4使用 lambda expression 
Runnable race2 = () -> System.out.println("Hello world !"); 
  
// 直接调用 run 方法(没开新线程哦!) 
race1.run(); 
race2.run();

 

3.使用lambda排序集合
String[] players = {"Rafael Nadal", "Novak Djokovic",  
    "Stanislas Wawrinka"}; 
 
// 3.1 使用匿名内部类根据 name 排序 players 
Arrays.sort(players, new Comparator<String>() { 
    @Override 
    public int compare(String s1, String s2) { 
        return (s1.compareTo(s2)); 
    } 
});
// 3.2 使用 lambda expression 排序 players 
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2)); 
Arrays.sort(players, sortByName); 
 
// 3.3 也可以采用如下形式: 
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2))); 

 

4.使用过滤器
// 定义 filters 
Predicate<Person> ageFilter = (p) -> (p.getAge() > 25); 
Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400); 
Predicate<Person> genderFilter = (p) -> ("female".equals(p.getGender())); 
System.out.println("下面是年龄大于 24岁且月薪在$1,400以上的女PHP程序员:"); 
list.stream().filter(ageFilter) 
       .filter(salaryFilter) 
       .filter(genderFilter) 
       .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName())); 

 

5.limit
System.out.println("最前面的3个 Java programmers:"); 
javaProgrammers.stream() 
          .limit(3) 
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName())); 
System.out.println("最前面的3个女性 Java programmers:"); 
javaProgrammers.stream() 
          .filter(genderFilter) 
          .limit(3) 
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
   
6.集合中最大的或者最小的(.get()可以得到集合的元素)
System.out.println("工资最低的 Java programmer:"); 
Person pers = javaProgrammers 
          .stream() 
          .min((p1, p2) -> (p1.getSalary() - p2.getSalary())) 
          .get() 
System.out.printf("Name: %s %s; Salary: $%,d.", pers.getFirstName(), pers.getLastName(), pers.getSalary()) 

 

System.out.println("工资最高的 Java programmer:"); 
Person person = javaProgrammers 
          .stream() 
          .max((p, p2) -> (p.getSalary() - p2.getSalary())) 
          .get() 
System.out.printf("Name: %s %s; Salary: $%,d.", person.getFirstName(), person.getLastName(), person.getSalary())

 

7.collect
System.out.println("将 PHP programmers 的 first name 拼接成字符串:"); 
String phpDevelopers = phpProgrammers 
          .stream() 
          .map(Person::getFirstName) 
          .collect(joining(" ; ")); // 在进一步的操作中可以作为标记(token)  
System.out.println("将 Java programmers 的 first name 存放到 Set:"); 
Set<String> javaDevFirstName = javaProgrammers 
          .stream() 
          .map(Person::getFirstName) 
          .collect(toSet());  
System.out.println("将 Java programmers 的 first name 存放到 TreeSet:"); 
TreeSet<String> javaDevLastName = javaProgrammers 
          .stream() 
        .map(Person::getLastName) 
          .collect(toCollection(TreeSet::new)); 

8. 使用summaryStatistics方法获得stream 中元素的各种汇总数据
//计算 count, min, max, sum, and average for numbers 
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
IntSummaryStatistics stats = numbers 
          .stream() 
          .mapToInt((x) -> x) 
          .summaryStatistics(); 
 
System.out.println("List中最大的数字 : " + stats.getMax()); 
System.out.println("List中最小的数字 : " + stats.getMin()); 
System.out.println("所有数字的总和   : " + stats.getSum()); 
System.out.println("所有数字的平均值 : " + stats.getAverage());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值