Lambda表达式的使用(直接上代码)

package com.sinosoft.web.controller.test.lambda;

import com.sinosoft.common.utils.DateUtils;
import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

public class LambdaForeachList {

    @Test
    public void lambdaList() {
        List<Empoyee> list = new ArrayList<>();
        list.add(new Empoyee("a", 3, 2));
        list.add(new Empoyee("b", 2, 1));
        list.add(new Empoyee("c", 1, 3));
        list.add(new Empoyee("d", 4, 4));
        list.add(new Empoyee("e", 5, 5));
        list.add(new Empoyee("e", 5, 5));
        /*
        1 使用foreach进行遍历集合
        item可以是任意值 类似于for循环中的循环值
         */
        list.forEach(item -> {
            System.out.println(item);
        });
        System.out.println("#####################################");
        list.forEach(item -> {
            item.setName(item.getName() + "测试");
            System.out.println(item.toString());
        });
        /*
        使用流操作
         */
        //去重 distinct()去重;collect.(Collectors.toList()).封装集合
        List<Empoyee> distinctList = list.stream().distinct().collect(Collectors.toList());
        System.out.println("去重:++++++++++++++++++++++++++++++");
        distinctList.forEach(item -> {
            System.out.println(item);
        });
        //排序 sorted((第一个对象),第二个对象)->返回值) (升降序看是第几个对象与第几个对象比较)
        List<Empoyee> sortedList = list.stream().sorted((o1, o2) -> o1.getAge() - o2.getAge()).collect(Collectors.toList());
        System.out.println("排序:-----------------------------------");
        sortedList.forEach(item -> {
            System.out.println(item);
        });
        //过滤 filter(item->{}) item为每一项 按照自己的需求来筛选list中的数据
        List<Empoyee> filterList = list.stream().filter(item -> item.getAge() > 3).collect(Collectors.toList());
        System.out.println("过滤:(((((((((((((((((((((((");
        filterList.forEach(item -> System.out.println(item));
        //map 提取对象中的某一个元素 用每一项来获得属性(也可以直接用对象::get属性)
        List<String> mapList = list.stream().map(Empoyee::getName).collect(Collectors.toList());
        System.out.println(" 使用map提取对象中的某一个属性进行存值))))))))))))))))))))))))))))))");
        mapList.forEach(item -> System.out.println(item));
        //统计 sum() mapToDouble()转换成double 还有其他类型转换
        double sum = list.stream().mapToDouble(Empoyee::getAge).sum();
        Long sumLong = list.stream().mapToLong(Empoyee::getSize).sum();
        System.out.println("总和(double):" + sum);
        System.out.println("总和(long):" + sumLong);
        //分组 Collectors.groupingBy(属性名)
        Map<Integer, List<Empoyee>> map = list.stream().collect(Collectors.groupingBy(Empoyee::getAge));
        //todo  使用lambda解析map
        //多重分组 Collectors.groupingBy(属性,Collectors.groupingBy(属性))
        //Map<String,Map<Integer,List<Empoyee>>>mapMap = list.stream().collect(Collectors.groupingBy(i->i.getAge(),Collectors.groupingBy(l->l.getClass().getField("size"))));

        //分组并计算综合
        //Map<String,Map<Integer, LongSummaryStatistics>> mapStatistics = list.stream().collect(Collectors.groupingBy(a->a.ge));
        //集合比较的简写方式:
        list.sort((o1, o2) -> {
            return o1.getAge() - o2.getAge();
        });
        System.out.println("sort:OOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
        list.forEach(item -> {
            System.out.println(item);
        });

    }

    /**
     * 使用lambda表达式遍历map集合
     */
    @Test
    public void testLambdaMap() {
        Map<String, String> map = new HashMap<>();
        map.put("1", "a");
        map.put("2", "b");
        map.put("3", "c");
        //第一种 使用map的foreach方法加上Java8的lambda表达式
        map.forEach((k, v) -> {
            System.out.println(k + "-" + v);
        });
        //第二种 使用Map.Entry来遍历map的条目
        for (Map.Entry<String, String> it : map.entrySet()) {
            System.out.println(it.getKey() + "-" + it.getValue());
        }
        //第三种 可以使用for结合map的keySet和values的方法来遍历
        for (String a : map.keySet()) {
            System.out.println(a);
        }
        for (String b : map.values()) {
            System.out.println(b);
        }
        //第四种 使用迭代器
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();//返回所有的entry实体
        while (iterator.hasNext()) {
            Map.Entry<String, String> next1 = iterator.next();
            String key = next1.getKey();
            String value = next1.getValue();
            System.out.println(key);
            System.out.println(value);
        }
        //通过键来遍历
        Iterator keyIterator = map.keySet().iterator();
        while (keyIterator.hasNext()) {
            System.out.println(keyIterator.next());
        }
        //通过值来遍历


    }


    @Test
    public void mytest() {
        Date a= new Date();
        Date b= new Date();


    }

}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值