JAVA8 Stream 映射 排序

万年不变的对象:

package com.zwq;

import lombok.Data;

/**
 * @author zhangwq
 */
@Data
public class Student {
    private int id;
    private String name;
    private String clazz;
    private Integer age;
    private Integer grade;

    public Student(String name, String clazz) {
        this.name = name;
        this.clazz = clazz;
    }

    public Student() {
    }

    public Student(int id, String name, String clazz, int age, Integer grade) {
        this.id = id;
        this.name = name;
        this.clazz = clazz;
        this.age = age;
        this.grade = grade;
    }
}

 

* map(Function f) 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
* mapToDouble(ToDoubleFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 DoubleStream。
* mapToInt(ToIntFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 IntStream。
* mapToLong(ToLongFunction f) 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 LongStream。
* flatMap(Function f) 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
@Test
public void test3(){
    List<String> list = Arrays.asList("zhangsan","lisi","wangwu","zhaoliu");
    list.stream().map(e->e.toUpperCase()).forEach(System.out::println);
    list.stream().flatMap(e->{
        List list1 = new ArrayList();
        for(char x : e.toCharArray()){
            list1.add(x);
    }
    return list1.stream();}).forEach(System.out::println);
}
* sorted() 产生一个新流,其中按自然顺序排序
* sorted(Comparator comp) 产生一个新流,其中按比较器顺序排序
@Test
    public void test4(){
        List<String> list = Arrays.asList("aaa","ddd","ccc","eee","bbb");
        list.stream().sorted().forEach(System.out::println);

        List<Student> students = Arrays.asList(
                new Student(1,"zhangsan","class1",18,60),
                new Student(2,"lisi","class1",20,59),
                new Student(3,"wangwu","class2",18,100),
                new Student(4,"wangwu","class2",16,100),
                new Student(5,"wangwu","class2",22,100),
                new Student(6,"zhaoliu","class2",18,80));

        students.stream().sorted((x1,x2)->{
           if(x1.getAge().equals(x2.getAge())){
                return x1.getGrade().compareTo(x2.getGrade());
            }else{
              return x1.getAge().compareTo(x2.getAge());
            }
        }).forEach(System.out::println);
    }

猜你喜欢

转载自blog.csdn.net/zwq_zwq_zwq/article/details/82085870