JDK1.8 stream 属性使用

本文介绍了如何使用Java 8的Stream API处理Student对象列表,包括筛选班级为2的学员、转换为Map、列表循环和分组等操作,展示了Stream API在数据处理中的强大功能。
public class Student {

    private Long stuId;
    private String stuName;
    private Integer age;
    private String stuCar;
    private Integer stuClass;

}



public class RedisTest {

    public static void main(String[]age){
        
        Student st1 = new Student();
        st1.setStuId(1l);
        st1.setAge(1);
        st1.setStuName("cui1");
        st1.setStuCar("111");
        st1.setStuClass(1);

        Student st2 = new Student();
        st2.setStuId(2l);
        st2.setAge(2);
        st2.setStuName("cui2");
        st2.setStuCar("222");
        st2.setStuClass(1);

        Student st3 = new Student();
        st3.setStuId(3l);
        st3.setAge(3);
        st3.setStuName("cui3");
        st3.setStuCar("333");
        st3.setStuClass(2);

        Student st4 = new Student();
        st4.setStuId(4l);
        st4.setAge(4);
        st4.setStuName("cui4");
        st4.setStuCar("4444");
        st4.setStuClass(2);

        Student st5 = new Student();
        st5.setStuId(5l);
        st5.setAge(5);
        st5.setStuName("cui5");
        st5.setStuCar("55");
        st5.setStuClass(3);


        List<Student> stList = new ArrayList<>();
        stList.add(st1);
        stList.add(st2);
        stList.add(st3);
        stList.add(st4);
        stList.add(st5);

        listToMap(stList);
        System.out.println("---------------1");
        foreachList(stList);

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

        ListToObjectMap(stList);

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

        listTofilter(stList);

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

        listToMapList(stList);

    }

    /**
     * 只要班级为2班的学生
     * list filter过滤
     * @param stList
     */
    public static void listTofilter(List<Student> stList){
        List<Student>  listType =  stList.stream().filter(t->t.getStuClass()==2).collect(Collectors.toList());
        listType.forEach(item->{
            System.out.println(item.getStuName());
        });
    }

    /**
     * list转map 对象
     * @param stList
     */
    public static  void ListToObjectMap(List<Student> stList){
        Map<Long,Student>  stuMap = stList.stream().collect(Collectors.toMap(Student::getStuId,Student->Student));
        stuMap.forEach((k,v)->{
            System.out.println(k+"--"+v.getStuName());
        });
    }

    /**
     * list转map
     * @param stList
     */
    public static void listToMap(List<Student> stList){
        Map<Long,String> map = stList.stream().collect(Collectors.toMap(Student::getStuId,Student::getStuName));
        map.forEach((k,v)->{
            System.out.println("Item : " + k + " Count : " + v);
        });
    }

    /**
     * list 循环
     * @param stList
     */
    public static void foreachList(List<Student> stList){
        stList.forEach(a->{
            System.out.println(a.getStuId());
        });
    }

    /**
     * list 分组
     * @param stuList
     */
    public static void listToMapList(List<Student> stuList){

        Map<Integer,List<Student>> s = stuList.stream().collect(Collectors.groupingBy(obj->obj.getStuClass()));
        s.forEach((k,v)->{
            System.out.println("k--"+k+"---"+v.size());
        });

    }

}

 编写了jdk1.8 stream() 常用属性

JDK 1.8 中的 Stream API 是一种用于处理集合数据的强大工具,它支持函数式编程风格,并且可以简化对集合的复杂操作。Stream API 的设计使得数据处理更加直观、简洁,同时也提高了代码的可读性和可维护性。以下是 Stream API 的主要使用场景: ### 数据过滤与筛选 Stream API 提供了 `filter` 方法,可以根据指定的条件对集合中的元素进行筛选。这种操作在处理大量数据时非常高效,尤其是在需要根据某些规则从集合中提取子集的情况下[^2]。 例如,从一个 `Person` 对象列表中筛选出年龄大于 25 岁的人: ```java List<Person> filteredPeople = people.stream() .filter(p -> p.getAge() > 25) .collect(Collectors.toList()); ``` ### 数据映射与转换 通过 `map` 方法,Stream API 可以将集合中的每个元素按照某种方式转换为另一个对象。这种转换在处理数据时非常常见,例如将一个字符串列表转换为它们的长度列表,或者将一组对象转换为另一组对象[^3]。 ```java List<Integer> lengths = strings.stream() .map(String::length) .collect(Collectors.toList()); ``` ### 数据聚合 Stream API 支持多种聚合操作,如 `count`、`max`、`min` 和 `sum`,这些操作可以用于计算集合中元素的统计信息。这些方法通常用于数据分析和报告生成[^2]。 ```java long count = numbers.stream().count(); Optional<Integer> max = numbers.stream().max(Integer::compare); ``` ### 分组与分区 `Collectors.groupingBy` 和 `Collectors.partitioningBy` 是 Stream API 中非常强大的功能,可以按照某个属性对数据进行分组或分区。这种操作在需要根据某个字段对数据进行分类时非常有用[^5]。 例如,按年龄对 `Person` 对象进行分组: ```java Map<Integer, List<Person>> groupedByAge = people.stream() .collect(Collectors.groupingBy(Person::getAge)); ``` ### 并行处理 Stream API 支持串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。这种模式在处理大规模数据集时可以显著提高性能[^2]。 ```java int sum = numbers.parallelStream() .mapToInt(Integer::intValue) .sum(); ``` ### 遍历与消费 Stream API 提供了 `forEach` 方法,可以用于遍历流中的每个元素并执行某个操作。这种方法通常用于执行副作用操作,如打印日志或更新外部状态[^4]。 ```java people.stream() .forEach(p -> System.out.println(p.getName())); ``` ### 数据排序 Stream API 提供了 `sorted` 方法,可以对流中的元素进行排序。这种操作在需要对数据进行排序时非常方便,尤其是在需要根据多个字段进行排序的情况下[^2]。 ```java List<Person> sortedPeople = people.stream() .sorted(Comparator.comparing(Person::getAge)) .collect(Collectors.toList()); ``` ### 数据缩减 `reduce` 方法允许将流中的元素组合成一个单一的结果,例如求和、求积或拼接字符串。这种操作在需要将多个值合并为一个值时非常有用。 ```java Optional<String> concatenatedNames = people.stream() .map(Person::getName) .reduce((name1, name2) -> name1 + ", " + name2); ``` ### 集合操作 Stream API 还支持集合操作,如 `distinct`、`limit` 和 `skip`,这些操作可以用于去重、截取或跳过某些元素。这些方法在需要处理集合的子集时非常有用。 ```java List<String> uniqueNames = people.stream() .map(Person::getName) .distinct() .collect(Collectors.toList()); ``` ### 相关问题 1. 如何在 Java 8使用 Stream API 进行数据过滤? 2. Stream API 中的 `map` 方法有哪些常见的使用场景? 3. 如何利用 Stream API 对数据进行分组和分区? 4. Stream API 如何支持并行处理以提高性能? 5. Stream API 中的 `reduce` 方法有哪些实际应用?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值