java流Stream

 

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

public class StreamDemo1 {
    public static void main(String[] args) {
        demo2();
    }
    public static void demo1() {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");
        list.add("张小四");
//        list.stream()
//            .filter(name -> name.startsWith("张"))
//            .filter(name -> name.length() == 3)
//            .forEach(System.out::println);
        List<String> newList = list.stream()
                .filter(name -> name.startsWith("张"))
                .filter(name -> name.length() == 3)
                .collect(Collectors.toList());
        System.out.println(newList);

    }

    public static void demo2() {
        // 获取集合的stream流
        Collection<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");

        Stream<String> s1 = list.stream();


        //map 集合 转为stream流
        Map<String ,Integer> map = new HashMap<>();
        map.put("张无忌", 16);
        map.put("周芷若", 17);
        // 获取键流
        Stream<String> s2 = map.keySet().stream();
        // 获取值流
        Stream<Integer> s3 = map.values().stream();
        // 获取键值对流
        Stream<Map.Entry<String, Integer>> s4 = map.entrySet().stream();
        s4.filter(entry -> entry.getKey().startsWith("张"))
            .filter(entry -> entry.getValue() >= 16)
            .forEach(entry -> System.out.println(entry.getKey() + "---" + entry.getValue()));


        // 获取数组的流
        String[] arr = new String[]{"张无忌", "周芷若", "赵敏", "张强", "张三丰"};
        Stream<String> s5 = Arrays.stream(arr);
        System.out.println(s5.count());
        Stream<String> arr1 = Stream.of(arr);
        System.out.println(arr1.count());

        Stream<String> s6 = Stream.of("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        System.out.println(s6.count());
        //'List.of().stream()' 可被替换为 'Stream.of()'
        List.of("张无忌", "周芷若", "赵敏", "张强", "张三丰").stream()
            .filter(name -> name.startsWith("张"))
            .filter(name -> name.length() == 3)
            .forEach(System.out::println);



    }
}

  

public class Teacher implements Comparable<Teacher>{
    private String name;
    private int age;
    private int salary;

    public Teacher(String name, int age, int salary){
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getName(){
        return name;
    }


    public int getAge(){
        return age;
    }


    public int getSalary(){
        return salary;
    }

    @Override
    public int compareTo(Teacher t){
        return this.salary - t.salary;
    }

    @Override
    public String toString(){
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }


}

  




import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo2 {


    public static void main(String[] args)
    {

//        Collection<String> list = new ArrayList<>();

        List<Teacher> tearchs = new ArrayList<>();
        tearchs.add(new Teacher("张三", 23,5000));
        tearchs.add(new Teacher("Jack", 22,10000));
        tearchs.add(new Teacher("Tom", 21,7000));
        tearchs.add(new Teacher("Lucy", 20,9000));
        tearchs.add(new Teacher("Mike", 19,6000));
        tearchs.add(new Teacher("Lily", 18,4000));


        tearchs.stream()
            .filter(t -> t.getSalary() > 5000)
            .sorted((t1, t2) -> t2.getSalary() - t1.getSalary())
            .forEach(System.out::println);

        System.out.println("--------------------------------");
        long count = tearchs.stream().filter(t -> t.getSalary() > 5000).count();
        System.out.println(count);

        System.out.println("--------------------------------");

//        Optional<Teacher> max = tearchs.stream().max((t1, t2) -> t1.getSalary() - t2.getSalary());
//        System.out.println(max.get());
        Optional<Teacher> max = tearchs.stream().max((t1, t2) -> Double.compare(t1.getSalary() , t2.getSalary()));
        System.out.println(max.get());

        System.out.println("--------------------------------");
        Optional<Teacher> min = tearchs.stream().min((t1, t2) -> Double.compare(t1.getSalary() , t2.getSalary()));
        System.out.println(min.get());

        System.out.println("--------------------------------");
        tearchs.stream().map(Teacher::getName).forEach(System.out::println);

        System.out.println("--------------------------------");
        tearchs.stream().mapToInt(Teacher::getSalary).forEach(System.out::println);

        System.out.println("--------------------------------");

        // 收集到集合或者数组中去
        Stream<String> s1 = tearchs.stream().map(Teacher::getName);
        List<String> list = s1.collect(Collectors.toList());
        System.out.println(list);

        List<Teacher> collect = tearchs.stream().filter(t -> t.getSalary() > 5000).sorted((t1, t2) -> Double.compare(t2.getSalary() , t1.getSalary())).limit(2).collect(Collectors.toList());
        System.out.println(collect);

        Set<Teacher> collect1 = tearchs.stream().filter(t -> t.getSalary() > 5000).sorted((t1, t2) -> Double.compare(t2.getSalary() , t1.getSalary())).skip(2).collect(Collectors.toSet());
        System.out.println(collect1);

        Map<String, Integer> map = tearchs.stream().collect(Collectors.toMap(Teacher::getName, Teacher::getAge));
        System.out.println(map);

        Map<String, Teacher> map1 = tearchs.stream().collect(Collectors.toMap(Teacher::getName, t -> t));
        System.out.println(map1);

        Map<String, Integer> map2 = tearchs.stream().collect(Collectors.toMap(Teacher::getName, Teacher::getSalary));
        System.out.println(map2);

        Map<String, Teacher> map3 = tearchs.stream().collect(Collectors.toMap(new Function<Teacher, String>() {
            @Override
            public String apply(Teacher teacher) {
                return teacher.getName();
            }
        }, new Function<Teacher, Teacher>() {
            @Override
            public Teacher apply(Teacher teacher) {
                    return teacher;
            }
        }));
        System.out.println(map3);


    }

}

  




posted @ 2025-06-23 21:57  巨兽~墨菲特  阅读(7)  评论(0)    收藏  举报