zoukankan      html  css  js  c++  java
  • Java中Lambda表达式的简单使用

      Lambda表达式是Java SE 8中一个重要的新特性。你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

      Lambda运算符:所有的Lambda表达式都是用新的Lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是Lambda的主体。

      在平常 我们可以要通过sql  对数据进行过滤、分组、转化等,如果非常频繁,会对数据库增加负担,我们这里就可以简单使用Lambda表达式

    1、准备一个Object类

    import java.math.BigDecimal;
    
    public class AObject {
    
        private String a;
        
        private String b;
        
        private BigDecimal money;
        
        private Integer num;
    
        public String getA() {
            return a;
        }
    
        public void setA(String a) {
            this.a = a;
        }
    
        public String getB() {
            return b;
        }
    
        public void setB(String b) {
            this.b = b;
        }
        
        public BigDecimal getMoney() {
            return money;
        }
    
        public void setMoney(BigDecimal money) {
            this.money = money;
        }
    
        public Integer getNum() {
            return num;
        }
    
        public void setNum(Integer num) {
            this.num = num;
        }
    
        @Override
        public String toString(){
            return a+" "+b;
        }
        
        
    }

    2、Lambda使用

    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public class StreamUtils {
        
        public static void main(String args[]){
            listToMap();
            filter();
    //        groupingBy();
    //        sum();
            
        }
    
        /**
         * List<T> -> Map
         * 需要注意的是:
         * toMap 如果集合对象有重复的key,会报错Duplicate key ....
         *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
         */
        public static void listToMap() {
            List<AObject> aList = new ArrayList<>();
            AObject aObject = new AObject();
            aObject.setA("a");
            aObject.setB("B");
            AObject aObject1 = new AObject();
            aObject1.setA("a1");
            aObject1.setB("B1");
            aList.add(aObject);
            aList.add(aObject1);
            
            Map<String, AObject> map = aList.stream().
                    collect(Collectors.toMap(AObject::getA, AObject->AObject,(k1,k2)->k1));
            for(Map.Entry<String, AObject> entry : map.entrySet()){
                System.out.println("key:"+entry.getKey()+"  value:"+entry.getValue().toString());
            }
    //        key:a1  value:a1 B1
    //        key:a  value:a B
            
            Map<String, String> map1 = aList.stream().
                    collect(Collectors.toMap(AObject::getA, AObject::getB,(k1,k2)->k1));
            for(Map.Entry<String, String> entry : map1.entrySet()){
                System.out.println("key:"+entry.getKey()+"  value:"+entry.getValue());
            }
    //        key:a1  value:B1
    //        key:a  value:B
            
        }
        
        /**
         * 过滤
         */
        public static void filter() {
            List<String> aList = new ArrayList<>();
            aList.add("1");
            aList.add("a");
            List<String> slist =aList.stream().filter(e -> "a".equals(e)).collect(Collectors.toList());
            System.out.println(slist.toString());//        [a]
                    
            
            List<AObject> list = new ArrayList<>();
            AObject aObject = new AObject();
            aObject.setA("110000");
            aObject.setB("北京");
            AObject aObject2 = new AObject();
            aObject2.setA("330000");
            aObject2.setB("浙江");
            list.add(aObject);
            list.add(aObject2);
            List<AObject> newList =list.stream().filter(e -> e.getA().equals("110000")).collect(Collectors.toList());
            System.out.println(newList.toString());//        [110000 北京]
        }
        
        /**
         * 分组
         */
        public static void groupingBy(){
            List<AObject> list = new ArrayList<>();
            AObject aObject = new AObject();
            aObject.setA("110000");
            aObject.setB("北京");
            AObject aObject1 = new AObject();
            aObject1.setA("110000");
            aObject1.setB("北京1");
            AObject aObject2 = new AObject();
            aObject2.setA("330000");
            aObject2.setB("浙江");
            AObject aObject3 = new AObject();
            aObject3.setA("330000");
            aObject3.setB("浙江1");
            list.add(aObject);
            list.add(aObject1);
            list.add(aObject2);
            list.add(aObject3);
            //groupingBy  只传key 默认把整个集合关联,  也可以把集合某个数据属性 当做集合取出来,如下groupBy1
            Map<String, List<AObject>> groupBy = list.stream().collect(Collectors.groupingBy(AObject::getA));
            for(Map.Entry<String, List<AObject>> item : groupBy.entrySet()){
                System.out.print(item.getKey()+" : ");
                for(AObject a : item.getValue()){
                    System.out.print(a.toString()+";");
                }
                System.out.println();
            }
            //110000 : 110000 北京;110000 北京1;
            //330000 : 330000 浙江;330000 浙江1;
            
            Map<String, List<String>> groupBy1 = list.stream().collect(
                    Collectors.groupingBy(AObject::getA, Collectors.mapping(AObject::getB, Collectors.toList())));
            for(Map.Entry<String, List<String>> item : groupBy1.entrySet()){
                System.out.print(item.getKey()+" : ");
                for(String a : item.getValue()){
                    System.out.print(a+";");
                }
                System.out.println();
            }
    //        110000 : 北京;北京1;
    //        330000 : 浙江;浙江1;
        }
        
        /**
         * 求和
         */
        public static void sum(){
            List<AObject> list = new ArrayList<>();
            AObject aObject = new AObject();
            aObject.setMoney(new BigDecimal("100"));
            aObject.setNum(100);
            AObject aObject1 = new AObject();
            aObject1.setMoney(new BigDecimal("200"));
            aObject1.setNum(200);
            AObject aObject2 = new AObject();
            aObject2.setMoney(new BigDecimal("300"));
            aObject2.setNum(300);
            AObject aObject3 = new AObject();
            aObject3.setMoney(new BigDecimal("400"));
            aObject3.setNum(400);
            list.add(aObject);
            list.add(aObject1);
            list.add(aObject2);
            list.add(aObject3);
            //注意的是  求和的属性 值不能为null
            BigDecimal totalMoney = list.stream().map(AObject::getMoney).
                    reduce(BigDecimal.ZERO, BigDecimal::add);
            System.out.println("totalMoney:"+totalMoney); // totalMoney:1000
            Integer totalMoney1 = list.stream().map(AObject::getNum).
                    reduce(0, Integer::sum);
            System.out.println("totalSum:"+totalMoney1); // totalSum:1000
            int sum = list.stream().mapToInt(AObject::getNum).sum();
            System.out.println("sum:"+sum);// sum:1000
        }
        
        
    }
  • 相关阅读:
    2019.2.19 区块链论文翻译
    2019.2.18 区块链论文翻译
    2019.2.15 区块链论文翻译
    2019.2.14 区块链论文翻译
    #在蓝懿学习iOS的日子#Day7
    #在蓝懿学习iOS的日子#Day6
    #在蓝懿学习iOS的日子#第二个练习日
    #在蓝懿学习iOS的日子#Day5
    #在蓝懿学习iOS的日子#第一个练习日
    #在蓝懿学习iOS的日子#Day3
  • 原文地址:https://www.cnblogs.com/zwdx/p/9252429.html
Copyright © 2011-2022 走看看