MST

星途 面试题库

面试题:Java Stream map方法一对一转换复杂对象

定义一个包含学生姓名和成绩的Student类,现有一个List<Student>,要求使用Java Stream的map方法将其转换为一个List<String>,其中每个字符串格式为"姓名:成绩",例如["张三:85","李四:90"]。并且说明如果在map转换过程中出现空指针异常,可能的原因及如何避免。
34.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("张三", 85));
        studentList.add(new Student("李四", 90));

        List<String> resultList = studentList.stream()
               .map(student -> student.getName() + ":" + student.getScore())
               .collect(Collectors.toList());

        System.out.println(resultList);
    }
}

空指针异常原因及避免方法

  1. 原因
    • map转换过程中,如果Student对象为null,或者Student对象中的name属性为null,就会出现空指针异常。例如,如果studentList中有null元素,执行student.getName()时就会抛出空指针异常;如果Student对象的name属性未正确初始化,为null,执行student.getName() + ":" + student.getScore()时也会抛出空指针异常。
  2. 避免方法
    • 过滤null元素:在使用map方法之前,先使用filter方法过滤掉List<Student>中的null元素。例如:
    List<String> resultList = studentList.stream()
           .filter(student -> student != null)
           .map(student -> student.getName() + ":" + student.getScore())
           .collect(Collectors.toList());
    
    • 增加空值检查:在map方法中对可能为空的属性增加空值检查。例如:
    List<String> resultList = studentList.stream()
           .map(student -> {
                if (student == null) {
                    return "未知:0";
                }
                String name = student.getName();
                if (name == null) {
                    name = "未知";
                }
                return name + ":" + student.getScore();
            })
           .collect(Collectors.toList());