为了账号安全,请及时绑定邮箱和手机立即绑定

将对象列表转换为属性映射

将对象列表转换为属性映射

繁花如伊 2023-06-08 20:18:19
我有一个Section具有如下属性的类class Section {    private String name;    private String code;    // respective getters and setters.}现在我有一个部分对象列表,我想将该列表转换为名称和代码的映射。我知道可以按以下常规方式完成。List<Section> sections = getSections();Map<String, String> nameCodeMap = new HashMap<>();for (Section section : sections) {    nameCodeMap.put(section.getCode(), section.getName());}我想知道 Java-8 流是否可以实现类似的功能。
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

不难。只需将toMap收集器与对吸气剂的适当方法引用一起使用:

sections.stream().collect(
    Collectors.toMap(Section::getName, Section::getCode)
);


查看完整回答
反对 回复 2023-06-08
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果您没有具有Section相同 getCode() 值的元素:

Map<String, String> map = sections.stream()
                                 .collect(toMap(Section::getCode, Section::getName);

如果您有Section具有相同 getCode() 值的元素,则前一个将引发,IllegalStateException因为它不接受该值。所以你必须合并它们。
例如,要实现与您的实际代码相同的事情,即覆盖现有键的现有值,请使用此重载:

toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper,
                                    BinaryOperator<U> mergeFunction)

并返回合并函数的第二个参数:

Map<String, String> map = sections.stream()
                                 .collect(toMap(Section::getCode, Section::getName, (a, b) -> b);



查看完整回答
反对 回复 2023-06-08
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

请在下面找到女士的代码:


List<Section> sections = Arrays.asList(new Section("Pratik", "ABC"),

                                       new Section("Rohit", "XYZ"));


Map<String, String> nameCodeMap = sections.stream().collect(

                                  Collectors.toMap(section -> section.getName(),

                                                   section -> section.getCode()));


nameCodeMap.forEach((k, v) -> System.out.println("Key " + k + " " + "Value " + v));



查看完整回答
反对 回复 2023-06-08
  • 3 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信