Java:JDK8中Stream的用法

简介: Java:JDK8中Stream的用法

目录

筛选

需求:

  • 筛选出年龄大于20的人

实体类 User.java

package com.example.demo;
public class User {
    private String name;
    private Integer age;
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

使用for循环

package com.example.demo;
import java.util.ArrayList;
import java.util.List;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        // 筛选出年龄大于20的人
        List<User> newUserList = new ArrayList<>();
        for (User user : userList) {
            if (user.getAge() > 20) {
                newUserList.add(user);
            }
        }
        System.out.println(newUserList);
        // [User{name='刘备', age=40}, User{name='关羽', age=30}]
    }
}

使用Stream

package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        // 筛选出年龄大于20的人
        List<User> newUserList = userList
                .stream()
                .filter(u -> u.getAge() > 20)
                .collect(Collectors.toList());
        System.out.println(newUserList);
        // [User{name='刘备', age=40}, User{name='关羽', age=30}]
    }
}

循环

JDK7

package com.example.demo;
import java.util.ArrayList;
import java.util.List;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        for (User user : userList) {
            System.out.println(user);
        }
        // User{name='刘备', age=40}
        // User{name='关羽', age=30}
        // User{name='张飞', age=20}
    }
}

JDK8

package com.example.demo;
import java.util.ArrayList;
import java.util.List;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        userList.stream().forEach(u -> {
            System.out.println(u);
        });
        // 或者
        // userList.forEach(u -> {
        //     System.out.println(u);
        // });
        // User{name='刘备', age=40}
        // User{name='关羽', age=30}
        // User{name='张飞', age=20}
    }
}

聚合函数

需求:

  • 获取List 中字符串最长的那个

JDK7

package com.example.demo;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Demo {
    public static void main(String[] args) {
        String[] strArr = new String[]{"a", "bb", "ccc"};
        List<String> list = Arrays.asList(strArr);
        String max = Collections.max(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.length() < o2.length()) {
                    return -1;
                } else if (o1.length() > o2.length()) {
                    return 1;
                } else {
                    return o1.compareTo(o2);
                }
            }
        });
        System.out.println(max);
        // ccc
    }
}

JDK8

package com.example.demo;
import java.util.*;
public class Demo {
    public static void main(String[] args) {
        String[] strArr = new String[]{"a", "bb", "ccc"};
        List<String> list = Arrays.asList(strArr);
        Optional<String> max = list.stream()
                .max(Comparator.comparing(String::length));
        System.out.println(max.get());
        // ccc
    }
}

count

package com.example.demo;
import java.util.*;
public class Demo {
    public static void main(String[] args) {
        // 获取List中大于2的元素的个数
        List<Integer> list = Arrays.asList(1, 2, 3);
        long count = list.stream()
                .filter(x -> x > 2)
                .count();
        System.out.println(count);
        // 1
    }
}

Map

需求:

  • 获取List中的name 数据

JDK7

package com.example.demo;
import java.util.*;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        List<String> names = new ArrayList<>();
        for (User user : userList) {
            names.add(user.getName());
        }
        System.out.println(names);
        //    [刘备, 关羽, 张飞]
    }
}

JDK8

package com.example.demo;
import java.util.*;
import java.util.stream.Collectors;
public class Demo {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));
        List<String> names = userList.stream()
                .map(User::getName)
                .collect(Collectors.toList());
        System.out.println(names);
        //    [刘备, 关羽, 张飞]
    }
}

参考

别再问问JDK的Stream怎么用了好么?面试官


相关文章
|
5天前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
12天前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
174 100
|
12天前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
174 101
|
12天前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
169 101
|
2月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
325 188
|
2月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
230 92
|
22天前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
Java Stream API 的强大功能
|
2月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
2月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
196 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
3月前
|
Oracle Java 关系型数据库
新手必看:Java 开发环境搭建之 JDK 与 Maven
本文分享了 Java 学习中 JDK 安装配置与 Maven 使用的入门知识,涵盖 JDK 下载安装、环境变量设置、Maven 安装配置及本地仓库与镜像设置,帮助新手快速搭建 Java 开发环境。
220 0