返回

Java:JDK8中Stream的用法

发布时间:2023-09-14 12:06:38 198

(目录)

筛选

需求:

  • 筛选出年龄大于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 userList = new ArrayList<>();

        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));

        // 筛选出年龄大于20的人
        List 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 userList = new ArrayList<>();

        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));

        // 筛选出年龄大于20的人
        List 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 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 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 list = Arrays.asList(strArr);
        String max = Collections.max(list, new Comparator() {
            @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 list = Arrays.asList(strArr);
        Optional 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 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 userList = new ArrayList<>();

        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));

        List 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 userList = new ArrayList<>();

        userList.add(new User("刘备", 40));
        userList.add(new User("关羽", 30));
        userList.add(new User("张飞", 20));

        List names = userList.stream()
                .map(User::getName)
                .collect(Collectors.toList());

        System.out.println(names);
        //    [刘备, 关羽, 张飞]
    }
}

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

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
CodeForces 755C PolandBall and Forest 2023-09-14 09:07:30