Удаление определенных элементов из объекта на карте - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть объект Карта

Map<Integer, User>, где идентификаторы пользователя сопоставлены с объектом пользователя, который имеет идентификатор, имя, фамилию, имя, фамилию, адрес электронной почты, zipCode, страну, состояние

Какя могу уменьшить его до карты, которая имеет только идентификатор и имя, другая информация о пользователе не имеет значения.

- РЕДАКТИРОВАТЬ

извините, я не ясно в своем вопросе, я в основном хочуперейти от

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, который имеет все пользовательские свойства, и класс UserV2, который имеет только id, имя и страну

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

В этом ответе используется 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());
        }));
0 голосов
/ 19 февраля 2019

Используйте Stream, чтобы избежать временного состояния.

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());
       }
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...