JAVA 8 lambda表达式

import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Union;
import java.util.*;
import java.util.stream.Collectors;

/**
 *  JAVA 8 lambda表达式
 */
public class Test {
    public static void main(String[] args) {
        String[] array = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka",
                "David Ferrer","Roger Federer",
                "Andy Murray","Tomas Berdych",
                "Juan Martin Del Potro"};
        List<Person> programmers = new ArrayList<Person>() {
            {
                //Person实体类略,姓名,职业,性别,年龄,薪资
                add(new Person("Elsdon", "Java programmer", "male", 43, 2000));
                add(new Person("Tamsen", "Java programmer", "female", 23, 1500));
                add(new Person("Floyd", "Java programmer", "male", 33, 1800));
                add(new Person("Sindy", "Java programmer", "female", 32, 1600));
                add(new Person("Vere",  "Java programmer", "male", 22, 1200));
                add(new Person("Maude",  "Java programmer", "female", 27, 1900));
                add(new Person("Shawn",  "Java programmer", "male", 30, 2300));
                add(new Person("Jayden","Java programmer", "female", 35, 1700));
                add(new Person("Palmer", "Java programmer", "male", 33, 2000));
                add(new Person("Addison", "Java programmer", "female", 34, 1450));
            }
        };

        List<String> strings = Arrays.asList(array);
        //strings.forEach(a-> System.out.println(a+","));
        //
        //new Thread(()-> System.out.println(Thread.currentThread().getName()+"|hello")).start();
        //遍历
        System.out.println("所有程序员的姓名:");
        programmers.forEach(name-> System.out.println(name.getName()));
        //遍历
        System.out.println("给程序员加薪 5% :");
        //Consumer<Person> giveRaise = e->e.setSalary(e.getSalary()/100*5+e.getSalary());
        //programmers.forEach(giveRaise);
        programmers.forEach(e->e.setSalary(e.getSalary()+e.getSalary()/100*5));

        //过滤filter
        System.out.println("下面是月薪超过$1,400 的程序员:");
        programmers.stream().filter(e->e.getSalary()>1400).forEach(a-> System.out.println(a.getName()));
        //排序sorted
        System.out.println("薪资由高到低:");
        //自然排序
        System.out.println(programmers.stream().map(e->e.getSalary()).sorted().collect(Collectors.toList()));
        //用比较器实现倒序
        System.out.println(programmers.stream().map(e->e.getSalary()).sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
 //limit+skip=subString!!!!!!!!
        //限制结果集limit
        System.out.println("限制结果集前6个:");
        programmers.stream().limit(6).forEach(e-> System.out.println(e.toString()));
	//skip忽略前n个
	System.out.println(Stream.of("a","b","c").skip(1).collect(Collectors.toList()));
	//去重distinct
	System.out.println(Stream.of("a","a","b","c","c").distinct().collect(Collectors.toList()));
        //最高(大)max
        System.out.println("薪资最高:");
        System.out.println(programmers.stream().max((a,b)->(a.getSalary()-b.getSalary())));
        //最低(小)min
        System.out.println("薪资最低:");
        System.out.println(programmers.stream().min((a,b)->(a.getSalary()-b.getSalary())));
        //collect返回集合(聚合)
        System.out.println("collect返回集合:");
        List<Person> list = programmers.stream().limit(9).collect(Collectors.toList());
        System.out.println(list.toString());
        //count计数
        System.out.println("count计数:"+programmers.stream().count());
        //map把集合中的每一个元素映射成另一个元素
        System.out.println("map:");
        programmers.stream().map(e->e.getName().toUpperCase()).forEach(e-> System.out.println(e));
        //flatMap把集合中的每一个元素映射成一个集合,扁平化的map
        List<String> list2 = Arrays.asList(array);
        List<String> collect = list2.stream().flatMap(a -> Arrays.stream(a.split(" "))).collect(Collectors.toList());
        System.out.println(collect.toString());
        //reduce将集合中所有值结合规约
        System.out.println(programmers.stream().map(e->e.getSalary()).reduce((a,b)->a+b).get());
        //使用summaryStatistics方法获得stream 中元素的各种汇总数据
        // 接下来我们可以访问这些方法,比如getMax, getMin, getSum或getAverage.
        List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
        IntSummaryStatistics statistics = primes.stream().mapToInt(x -> x).summaryStatistics();
        System.out.println(statistics.getAverage());
        System.out.println(statistics.getSum());
    }
}

System.out::println 可以看作 e -> System.out.println(e) 的缩写

map和flatMap的区别:

1. map会将每一条输入映射为一个新对象:

{苹果,梨子}.map(去皮) = {去皮苹果,去皮梨子}, 其中:“去皮”函数的类型为:A => B

2.flatMap包含两个操作:会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合:

{苹果,梨子}.flatMap(切碎) = {苹果碎片1,苹果碎片2,梨子碎片1,梨子碎片2} ,其中: “切碎”函数的类型为: A => List<B>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值