MST

星途 面试题库

面试题:Java Stream map方法结合复杂对象操作

有一个自定义类Person,包含属性name(字符串)和age(整数)。现有一个List<Person>,请使用Stream的map方法将其转换为一个Map<String, Integer>,其中键为Person的name,值为Person的age。若有同名的Person,取age较大者。
18.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.*;
import java.util.stream.Collectors;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> personList = Arrays.asList(
                new Person("Alice", 25),
                new Person("Bob", 30),
                new Person("Alice", 28)
        );

        Map<String, Integer> resultMap = personList.stream()
               .collect(Collectors.toMap(
                        Person::getName,
                        Person::getAge,
                        Math::max
                ));

        System.out.println(resultMap);
    }
}

上述代码实现了将List<Person>转换为Map<String, Integer>,如果存在同名的Person,取age较大者。主要步骤如下:

  1. 使用stream方法将List转换为流。
  2. 使用Collectors.toMap收集器,第一个参数Person::getName表示以Personname作为键;第二个参数Person::getAge表示以Personage作为值;第三个参数Math::max用于处理同名情况,取较大的age值。