stream()

本文详细介绍了Java Stream API中的filter、map和sorted方法,通过实例展示了如何使用它们进行条件筛选、对象属性提取和列表排序。filter用于根据条件过滤集合元素,map用于提取集合对象的特定属性,sorted则可以实现列表的升序或降序排列。此外,还展示了如何结合使用这些方法进行复杂操作,如年龄和ID的复合排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 stream()

1.1 stream().filter()

stream().filter()一般适用于list集合,主要作用就是条件查询,从集合中查询想要的数据。filter里面的参数user是指集合里面的每一项

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author LanceQ
 * @date 2021年08月14日 12:53
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        //创建3个对象
        User u1 = new User();
        u1.setAge(23);
        u1.setName("xiaoming");
        u1.setId(123456);

        User u2 = new User();
        u2.setAge(26);
        u2.setName("xiaofang");
        u2.setId(23456);

        User u3 = new User();
        u3.setAge(18);
        u3.setName("honghong");
        u3.setId(845113);
        //添加对象到集合
        list.add(u1);
        list.add(u2);
        list.add(u3);
        //条件筛选
        compare(list);

    }

    private static void compare(List<User> list) {
        //在集合中查询用户名为xiaofang的集合
        List<User> userList=list.stream().filter(user -> "xiaofang"
                .equals(user.getName())).collect(Collectors.toList());
        
        System.out.println(list);
        System.out.println(userList);
        
        List<User> userList1=list.stream().filter(user -> user.getAge()>19&&user.getAge()<24).collect(Collectors.toList());
        System.out.println(userList1);
    }
}

filter:筛选(里面输入的筛选的条件( user -> “xiaofang”.equals(user.getName()) )),这里的条件是查询uesr对象中name属性。

[User{id=123456, name='xiaoming', age=23}, User{id=23456, name='xiaofang', age=26}, User{id=845113, name='honghong', age=18}]
[User{id=23456, name='xiaofang', age=26}]
[User{id=123456, name='xiaoming', age=23}]

1.2 stream().map()

  1. stream().map()提取List对象的某一列值。然后可以通过该对象进行循环输出
    private static void printList(List<User> list) {
        List<String> userList=list.stream().map(User::getName).collect(Collectors.toList());

        userList.forEach(u -> System.out.println(u));
    }
  1. distinct() 对map获取的值进行去重
public class StreamDemo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        //创建4个对象
        User u1 = new User();
        u1.setAge(23);
        u1.setName("xiaoming");
        u1.setId(123456);

        User u2 = new User();
        u2.setAge(26);
        u2.setName("xiaofang");
        u2.setId(23456);

        User u3 = new User();
        u3.setAge(18);
        u3.setName("honghong");
        u3.setId(845113);

        User u4 = new User();
        u4.setAge(18);
        u4.setName("xiao18");
        u4.setId(895563);
        //添加对象到集合
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
        System.out.println(list);
        //去重
        printDistinctList(list);

    }

    private static void printDistinctList(List<User> list) {
        List<Integer> ageList=list.stream().map(User::getAge).distinct().collect(Collectors.toList());
        //遍历链表
        ageList.forEach(a->System.out.println(a));
    }

}

1.3 stream().sorted()

stream().sorted()对list集合进行排序

  1. 对id进行升序排序
    private static void printSortList(List<User> list) {
        List<User> userList=list.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
        userList.forEach(u->System.out.println(u));
    }

运行结果:

[User{id=123456, name='xiaoming', age=23}, User{id=23456, name='xiaofang', age=26}, User{id=845113, name='honghong', age=18}, User{id=895563, name='xiao18', age=18}]
User{id=23456, name='xiaofang', age=26}
User{id=123456, name='xiaoming', age=23}
User{id=845113, name='honghong', age=18}
User{id=895563, name='xiao18', age=18}
  1. 对id进行降序排序
    private static void printSortList(List<User> list) {
        //降序排序
        List<User> userList=list.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
        userList.forEach(u->System.out.println(u));
    }
  1. age升序,id降序
    private static void printSortList(List<User> list) {
        //age升序,id降序
        List<User> userList=list.stream()
                .sorted(Comparator.comparing(User::getAge).thenComparing(User::getId).reversed())
                .collect(Collectors.toList());
        
        userList.forEach(u->System.out.println(u));
    }

运行结果:

[User{id=123456, name='xiaoming', age=23}, User{id=23456, name='xiaofang', age=26}, User{id=845113, name='honghong', age=18}, User{id=895563, name='xiao18', age=18}]
User{id=23456, name='xiaofang', age=26}
User{id=123456, name='xiaoming', age=23}
User{id=895563, name='xiao18', age=18}
User{id=845113, name='honghong', age=18}

2 全部代码

public class User {
    private Integer id;
    private String name;
    private int age;

    public User() {
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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


import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author LanceQ
 * @date 2021年08月14日 12:53
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        //创建4个对象
        User u1 = new User();
        u1.setAge(23);
        u1.setName("xiaoming");
        u1.setId(123456);

        User u2 = new User();
        u2.setAge(26);
        u2.setName("xiaofang");
        u2.setId(23456);

        User u3 = new User();
        u3.setAge(18);
        u3.setName("honghong");
        u3.setId(845113);

        User u4 = new User();
        u4.setAge(18);
        u4.setName("xiao18");
        u4.setId(895563);
        //添加对象到集合
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
        System.out.println(list);

        //排序
        printSortList(list);
        //去重
        //printDistinctList(list);
        //获取某一列输出
        //printList(list);
        //条件帅选
       // compare(list);


    }

    private static void printSortList(List<User> list) {
        //升序排序
        //List<User> userList=list.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
        //降序排序
        //List<User> userList=list.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());

        //age升序,id降序
        List<User> userList=list.stream()
                .sorted(Comparator.comparing(User::getAge).thenComparing(User::getId).reversed())
                .collect(Collectors.toList());

        userList.forEach(u->System.out.println(u));
    }

    private static void printDistinctList(List<User> list) {
        List<Integer> ageList=list.stream().map(User::getAge).distinct().collect(Collectors.toList());

        ageList.forEach(a->System.out.println(a));
    }

    private static void printList(List<User> list) {
        List<String> userList=list.stream().map(User::getName).collect(Collectors.toList());

        userList.forEach(u -> System.out.println(u));
    }

    private static void compare(List<User> list) {
        //在集合中查询用户名为xiaofang的集合
        List<User> userList=list.stream().filter(user -> "xiaofang"
                .equals(user.getName())).collect(Collectors.toList());

        System.out.println(list);
        System.out.println(userList);

        List<User> userList1=list.stream().filter(user -> user.getAge()>19&&user.getAge()<24).collect(Collectors.toList());
        System.out.println(userList1);
    }
}

参考:
https://www.cnblogs.com/aitiknowledge/p/12806753.html
https://www.cnblogs.com/codecat/p/10903936.html
https://www.cnblogs.com/codecat/p/10873757.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值