java8 使用stream将List转成Map,或者从List对象中获取单个属性List,List中根据某个字段排序

1.

//学生类

import lombok.Data;

@Data
public class Student{

    private String stuId;

    private String name;

    private String age;

    private String sex;

}

2.

//测试类

public class Test {
    public static void main(String[] args) {

        // 创建学生List
        List<Student> list = createStudentList();

        // 1.获取value为Student对象,key为学生ID的Map
        getStudentObjectMap(list);

        // 2.获取value为学生姓名,key为学生ID的Map
        getStudentNameMap(list);

        // 3.获取学生姓名List
        getStudentNameList(list);

        //4.List中删除学生id = 1的对象

        list.removeIf(student -> student.getStuId().equals(1));

        //5.如果StudentId为Long类型如何转?

        Map<String, String> mapStr = list.stream().collect(Collectors.toMap(student -> student.getStuId().toString(), student -> JSON.toJSONString(student)));

        //6.根据List中Student的学生姓名排序
        Collections.sort(list, (o1, o2) -> {
            if (o1.getName().compareTo(o2.getName()) > 0) {
                return 1;
            } else if (o1.getName().compareTo(o2.getName()) < 0) {
                return -1;
            } else {
                return 0;
            }
        });

        //7.List遍历
        List<String> listStr = new ArrayList<>();

        List<Student> listStu = new ArrayList<>();

        listStr.forEach(studentStr -> {

            listStu.add(JSON.parseObject(studentStr, Student.class));

        });

        //List根据某个字段过滤、排序
        listStu.stream()
                .filter(student -> student.getSex().equals("女"))
                .sorted(Comparator.comparing(Student::getName))
                .collect(Collectors.toList());

        //List根据某个字段分组
        Map<String,List<Student>> sexGroupMap = listStu.stream()
                                                        .collect(Collectors.groupingBy(Student::getSex));
        //如果Map中多个名称相同,则studentId用逗号间隔
        Map<String,String> studentNameIdMap = listStu.stream()
                                                        .collect(toMap(Student::getName,Student::getStuId,(s,a)->s+","+a));


    }


    public static List<Student> createStudentList() {
        List<Student> list = new ArrayList<Student>();
        Student lily = new Student();
        lily.setStuId("1");
        lily.setName("lily");
        lily.setAge("14");
        lily.setSex("女");
        Student xiaoming = new Student();
        xiaoming.setStuId("2");
        xiaoming.setName("xiaoming");
        xiaoming.setAge("15");
        xiaoming.setSex("男");
        list.add(lily);
        list.add(xiaoming);
        return list;

    }

    public static Map<Object, Object> getStudentObjectMap(List<Student> list) {
        Map<Object, Object> map = list.stream().collect(Collectors.toMap(Student::getStuId, student -> student));
        map.forEach((key, value) -> {
            System.out.println("key:" + key + ",value:" + value);
        });
        return map;
    }

    public static Map<String, String> getStudentNameMap(List<Student> list) {
        Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getStuId, Student::getName));
        map.forEach((key, value) -> {
            System.out.println("key:" + key + ",value:" + value);
        });
        return map;
    }

    public static List<String> getStudentNameList(List<Student> list) {
        List<String> result = list.stream().map(student -> student.getName()).collect(Collectors.toList());
        for (String name : result) {
            System.out.println("name:" + name);
        }
        return result;
    }
}
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值