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

从地图中的对象中删除某些元素

从地图中的对象中删除某些元素

qq_花开花谢_0 2022-06-23 19:59:54
我有一个对象地图Map<Integer, User>其中用户的 id 映射到具有 id、firstName、lastName、Name、email、zipCode、country、state 的 User 对象如何将其简化为只有 id 和 name 的 Map,其他用户信息无关紧要。- 编辑抱歉,我的问题不清楚,我基本上想从0 : {id: 0, name: 'test0', country: 'us', firstName: 'ft0', lastName: 'lt0'},1 : {id: 1, name: 'test1', country: 'us', firstName: 'ft1', lastName: 'lt1'},2 : {id: 2, name: 'test2', country: 'us', firstName: 'ft2', lastName: 'lt2'}至0 : {id: 0, name: 'test0', country: 'us'},1 : {id: 1, name: 'test1', country: 'us'},2 : {id: 2, name: 'test2', country: 'us'}我还有一个包含所有用户属性的 User 类和一个只有 id、name 和 country 的 UserV2 类
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

使用 aStream来避免临时状态。


final Map<String, String> output = 

           input.entrySet()

                .stream()

                .collect(Collectors.toMap(

                    o -> o.getKey(),              

                    o -> o.getValue().getName()

                ));

Collectors.toMap接受两个功能接口作为输入参数


toMap(Function<? super T, ? extends K> keyMapper,  // Returns the new key, from the input Entry

      Function<? super T, ? extends U> valueMapper // Returns the new value, from the input Entry

) { ... }

要处理该用例,您需要创建一个新的、简化的用户表示。


public class SimpleUser {

    public final String id;

    public final String name;

    public final String country;


    private SimpleUser(

            final String id,

            final String name,

            final String country) {

        this.id = id;

        this.name = name;

        this.country = countr;

    }


    public static SimpleUser of(

            final String id,

            final String name,

            final String country) {

        return new SimpleUser(id, name, country);

    }

}

比你刚刚


.collect(Collectors.toMap(

       o -> o.getKey(),

       o -> {

          final User value = o.getValue();

          return SimpleUser.of(user.getId(), user.getName(), user.getCountry());

       }

));


查看完整回答
反对 回复 2022-06-23
?
倚天杖

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

这个答案使用Java Streams。该collect方法可以接受一个Collector. 这个取每一(Integer, User)对并创建一(Integer, UserV2)对。


Map<Integer, UserV2> userIdToUserV2 = users.entrySet().stream()

    // Map (Integer, User) -> (Integer, UserV2)

    .collect(Collectors.toMap(

        // Use the same Integer as the map key

        Map.Entry::getKey,

        // Build the new UserV2 map value

        v -> {

            User u = v.getValue();

            // Create a UserV2 from the User values

            return new UserV2(u.getId(), u.getName(), u.getCountry());

        }));


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

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