JDK1.8的lamda表达式

JDK1.8的lamda表达式

主要有:

1 //筛选与切片 filter:过滤出符合条件的元素 limit:使其元素不超过一定值。 skip:跳过前面一定数量的元素 distinct :去除重复数据,要重写hashcode和equals方法
2 //映射 map :根据规则将元素a 转变成要的 元素b

3 //排序 sorted() sorted(Comparator<? super T> comparator);

4 //终止操作 1.匹配与查找 //allMatch 检查元素是否都符合条件 //anyMatch 是否有符合条件的 //noneMatch 是否有不符合条件的 //最大,和最小 max min 内部遍历 forEach //映射和规约 map reduce 规约相当于总合 把所有的元素进行总合

5 //终止 1 收集 Collectors

 示例:

List<ProcessVersionButtonRelation> collect =
                     buttonList.stream()
                    .filter(button -> button.getType().equals(ButtonTypeEnum.COMMIT.getCode()) && StringUtils.isNotBlank(button.getBusinessApiId()) )
                    .collect(Collectors.toList());

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import javafx.scene.input.DataFormat;
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Predicate;
import java.util.function.ToDoubleFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamTest {

    @Test
    public void  test1(){
        Stream<Employee> stream = EmployeeData.getEmployeeData().stream();
        Stream<Employee> employeeStream = EmployeeData.getEmployeeData().parallelStream();

    }

    //筛选与切片  filter:过滤出符合条件的元素    limit:使其元素不超过一定值。    skip:跳过前面一定数量的元素   distinct :去除重复数据,要重写hashcode和equals方法
    @Test
    public void  test2(){
        List<Employee> employeeData = EmployeeData.getEmployeeData();
        Stream<Employee> stream = employeeData.stream();
//        Stream<Employee> employeeStream = EmployeeData.getEmployeeData().parallelStream();
        //过滤age>30
//        stream.filter(employee -> employee.getAge()>30).forEach(System.out::println);
        //过滤name   模糊查询
//        stream.filter(employee -> employee.getName().matches("^(.*马.*)$")).forEach(System.out::println);
        String name = "马";
        stream.filter(employee -> employee.getName().matches("^(.*"+name+".*)$")).forEach(System.out::println);

        System.out.println("-----------------");
        employeeData.stream().limit(3).forEach(System.out::println);
        System.out.println("-----------------");
        employeeData.stream().skip(3).forEach(System.out::println);


        System.out.println("-----------------");
        employeeData.add(new  Employee(1001,"马化腾",34,6000.78));
        employeeData.add(new  Employee(1001,"马化腾",34,6000.78));
        employeeData.stream().forEach(System.out::println);
        System.out.println("-----------------");
        employeeData.stream().distinct().forEach(System.out::println);

    }



    //映射    map :根据规则将元素a 转变成要的 元素b
    @Test
    public void test3(){
        //1 map使用:  获取员工姓名长度大于3的员工姓名
        List<Employee> employeeData = EmployeeData.getEmployeeData();
        //map先获取姓名,filter过滤
        employeeData.stream().map(Employee::getName).filter(str->str.length()>3).forEach(System.out::println);
        //map 里面出入转换的方法
        employeeData.stream().map((e)-> e.getName()).filter(str->str.length()>3).forEach(System.out::println);

        //2 flatMap 传入的就是Stream<T> :   map可能会Stream<Stream<String>>   ,使用flatMap则 生成Stream<String>   flatMap和Map的区别有点像List.add()  和 List.addAll()的区别
//        Stream<R> rStream = employeeData.stream().flatMap(Employee::getName);

    }
    //排序  sorted()   sorted(Comparator<? super T> comparator);
    @Test
    public void test4(){
        List<Employee> employeeData = EmployeeData.getEmployeeData();
        // 1 Employee需要实现  Comparable
        employeeData.stream().sorted().forEach(System.out::println);
        System.out.println("---------------");
        // 2  传Comparator实现方法
        employeeData.stream().sorted((e1,e2)->{return  Double.compare(e1.getSalary(),e2.getSalary());}).forEach(System.out::println);

    }



    //终止操作   1.匹配与查找   //allMatch 检查元素是否都符合条件  //anyMatch  是否有符合条件的   //noneMatch   是否有不符合条件的   //最大,和最小  max  min  内部遍历  forEach
    @Test
    public void test5(){
        List<Employee> employeeData = EmployeeData.getEmployeeData();
        //1. 匹配与查找
        //allMatch 检查元素是否都符合条件
        boolean b = employeeData.stream().allMatch(e -> e.getAge() > 20);
        System.out.println(b);
        System.out.println("---------------");
        //anyMatch  是否有符合条件的
        System.out.println(employeeData.stream().anyMatch(e->e.getSalary()>2000));
        System.out.println("---------------");
        //noneMatch   是否有不符合条件的
        System.out.println(employeeData.stream().noneMatch(e->e.getSalary()>2000));
        System.out.println("---------------");
        System.out.println(employeeData.stream().count());
        System.out.println("---------------");
        System.out.println(employeeData.stream().findAny());
        System.out.println("---------------");
        System.out.println(employeeData.stream().findFirst());
        System.out.println("---------------");

        System.out.println("---------------");
        //最大,和最小  max  min
        System.out.println(employeeData.stream().max(e->e.getSalary().intValue()));;
        System.out.println(employeeData.stream().min((e1,e2)->{return  Double.compare(e1.getSalary(),e2.getSalary());}));


//        employeeData.stream().peek();

    }


    //映射和规约   map reduce   规约相当于总合 把所有的元素进行总合
    @Test
    public void test6(){
//        计算1-10的和
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Integer reduce = integers.stream().reduce(0, Integer::sum);
        System.out.println(reduce);

        //计算公司员工的所有工资总合
        List<Employee> employeeData = EmployeeData.getEmployeeData();
        Optional<Double> reduce1 = employeeData.stream().map(e -> e.getSalary()).reduce((e1, e2) -> e1 + e2);
        System.out.println(reduce1.get());

    }

    //终止   1 收集  Collectors
    @Test
    public void test7() throws ParseException {
        List<Employee> employeeData = EmployeeData.getEmployeeData();
         employeeData.stream().filter(e -> e.getSalary() > 5000).collect(Collectors.toList()).forEach(System.out::println);
        System.out.println();
         employeeData.stream().filter(e -> e.getSalary() > 5000).collect(Collectors.toSet()).forEach(System.out::println);
        System.out.println("++++++++++++++++++");
         employeeData.stream().filter(new Predicate(){
             @Override
             public boolean test(Object o) {
                 return false;
             }
         }).forEach(System.out::println);
        System.out.println("++++++++++++++++++");
        Double collect = employeeData.stream().filter(e -> e.getSalary() > 5000).collect(Collectors.averagingDouble(e -> e.getSalary()));
        Double collec1t = employeeData.stream().filter(e -> e.getSalary() > 5000).collect(Collectors.averagingDouble(new ToDoubleFunction<Employee>() {
            @Override
            public double applyAsDouble(Employee value) {
                return value.getAge();
            }
        } ));
        System.out.println(collect);
        System.out.println(collec1t);

//        String test = "wsName_like_%32%,wsInitiator_eq_initializer";
//        JSONArray jsonArray = JSONArray.parseArray(test);
//        System.out.println(jsonArray.toJSONString());

        List<Map> variables = new ArrayList<>();
        Map wsStatus = new HashMap();
        wsStatus.put("name","wsStatus");
        wsStatus.put("operator","eq");
        wsStatus.put("value","preLunch" );
        variables.add(wsStatus);

        Map wsName = new HashMap();
        wsName.put("name","wsName");
        wsName.put("operator","like");
        wsName.put("value","SSSSSS");
        variables.add(wsName);

        String s2 = JSON.toJSONString(variables);
        JSONArray jsonArray = JSONArray.parseArray(s2);

        System.out.println(jsonArray);



        System.out.println("------------------------");
        LocalDateTime parse = LocalDateTime.parse("2020-11-23 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(parse);

        System.out.println(parse.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//        System.out.println(parse.format(DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss")));//不支持
//        System.out.println(parse.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")));//不支持
//        System.out.println(parse.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXXX")));//不支持

        System.out.println(parse.toLocalTime());
//        System.out.println(utcToLocal("2020-11-23 23:59:59"));;
        String timeString = "2020-11-23 23:59:59";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        SimpleDateFormat localFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        localFormater.setTimeZone(TimeZone.getDefault());
        Date parse1 = localFormater.parse(timeString);
        String UtcDate = sdf.format(parse1.getTime());
        System.out.println(UtcDate);




    }
    public static Date utcToLocal(String utcTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date utcDate = null;
        try {
            utcDate = sdf.parse(utcTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        sdf.setTimeZone(TimeZone.getDefault());
        Date locatlDate = null;
        String localTime = sdf.format(utcDate.getTime());
        try {
            locatlDate = sdf.parse(localTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return locatlDate;
    }
}

 

使用到的类:

@Data
@AllArgsConstructor
public class Employee implements Comparable {
    Integer id;
    String name;
    Integer age;
    Double salary;

    @Override
    public int compareTo(Object o) {
        this.getAge();
        return Integer.compare(this.getAge(),((Employee)o).getAge());

    }


//    @Override
//    public int compare(Object o1, Object o2) {
//        if(o1.getClass().equals(Employee.class) && o2.getClass().equals(Employee.class)){
//            return Integer.compare(((Employee) o1).getAge(),((Employee) o2).getAge());
//        }
//        return 0;
//    }
}
import java.util.*;

public class EmployeeData {


    public static List<Employee> getEmployeeData(){
        List<Employee> list = new ArrayList<>();
        list.add(new Employee(1001,"马化腾",34,6000.78));
        list.add(new Employee(1002,"马云",12,9876.12));
        list.add(new Employee(1003,"刘强东",33,3000.78));
        list.add(new Employee(1004,"雷军",26,7657.12));
        list.add(new Employee(1005,"李彦宏",65,5555.12));
        list.add(new Employee(1006,"比尔盖茨",42,9500.23));
        list.add(new Employee(1007,"任正非",26,4333.32));
        list.add(new Employee(1008,"扎克伯格",35,2500.33));


        return list;
    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值