lambda表达式-java中的应用

5 篇文章 0 订阅

转载来源

Lambda表达式的好处

:在java8之前,如果想将行为传入函数,只能使用匿名内部类,而java引入的lambda表达式取代了匿名内部类,允许函数式风格编写代码,示例:

        java8之前的匿名内部类
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println("doSomething before1.8");
            }
        }).start();

        //java8之后:此例lambda表达式参数为空
        new Thread(()-> System.out.println("doSomething 1.8")).start();

Lambda表达式的基本用法

(paramX,paramY...)->expression(X,Y...);
  • lambda表达式的参数通常会很短,尽量将所有代码写在一行,用于提高可读性;

示例

  1. 遍历集合类:
        List<String> list= Arrays.asList("du","gen","kui");
        list.forEach(a-> System.out.println(a));
           output:du
                   gen
                   kui
  1. Stream中的map(),filter(),collection(),get(),distinct()方法等,结合java.util.function.Predicate,进行函数式编程,做过滤:
//filter用于过滤
List languages=Arrays.asList("Java","C+++","python","R","JPP");
System.out.println("language startWith J");
//        filter(languages,(str)->str.toString().startsWith("J"));
 languages.stream().filter(n->n.toString().startsWith("J")).forEach(m-> System.out.println(m));
//Predicate中and()和or()的使用
Predicate<String> startwithJ=n->n.startsWith("J");//用lambda表达式赋值“逻辑"
 Predicate<String> lengthFour=n->n.length()==4;//<String>是n的类型
//输出J开始而且长度为4的元素:and
 System.out.println("language start with J AND length is 4");    languages.stream().filter(startwithJ.and(lengthFour)).forEach(n-> System.out.println(n));
//输出长度为4或者以J开头的
System.out.println("language start with J OR length is 4");
        languages.stream().filter(startwithJ.or(lengthFour)).forEach(n-> System.out.println(n));

//map()用于映射,但是不会改变原元素值
        List names=Arrays.asList("genkui","genliang","genlong");
        names.stream().map(x->"du"+x).forEach(y->System.out.print(y+"\t"));
        names.forEach(z-> System.out.println(z));

//TODO reduce方法的使用
        List<Integer> income=Arrays.asList(2800,5000,12800);//订单价格
        double SumBrokerage=income.stream().map((x)->x*0.1).reduce((sum,x)->sum+x).get();//订单佣金总和

System.out.println(SumBrokerage);

List<String> strList =    Arrays.asList("du","dug","dugenkui","d");
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList());
//        List<String> filtered = strList.stream().filter(x -> x.length()> 2).distinct().collect(Collectors.toList());
//        System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
  1. IntSummaryStatistics类计算最大值、最小值和平均值和总和和元素数量
        List<Integer> list=Arrays.asList(1,2,3,4);
        IntSummaryStatistics intSummaryStatistics=list.stream().mapToInt(x->x).summaryStatistics();
        System.out.println("最大值、最小值、平均值和总和以及元素数量分别是分别是:"+
                intSummaryStatistics.getMax()+":"+intSummaryStatistics.getMin()+":"+intSummaryStatistics.getAverage()
        +":"+intSummaryStatistics.getSum()+":"+intSummaryStatistics.getCount());

[相关补充]

        /**
         * map相关:
         *  1.key应该是唯一的:key和value是 n:1 的关系;
         *  2.同一个key使用put(key,valueX)时,后者会更新前者的value值;
         *  3.key.kesSet()返回key值得集合;
         *  4.同上
         */
        Map<String,String> map=new HashMap<>();
        map.put("du1","genkui");
        map.put("du2","genliang");
        map.put("du3","genlong");

        System.out.println(map.keySet()+map.values());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值