У меня есть два типа, как эти:Multiline Java поток Collect бросает
@Data
public class SomePersonType {
private String name;
private int age;
}
и
@Data
@Builder
public class SomeOtherPersonType {
private String name;
private int age;
}
Мне нужно преобразовать карту одного типа к другому. Итак, мой код выглядит так:
Мой настоящий код содержит много других атрибутов. Итак, я не хочу делать entry.getValue()
несколько раз. Я хочу поместить его в локальную переменную, а затем использовать ее. Что-то вроде этого:
public class Main {
public static void main(final String... args) {
final Map<String, SomePersonType> somePersonTypeMap = new HashMap<>();
// ...
// populating the map above with some values
// ...
final Map<String, SomeOtherPersonType> someOtherPersonTypeMap = somePersonTypeMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> {
final SomePersonType somePersonType = entry.getValue();
SomeOtherPersonType.builder()
.name(somePersonType.getName())
.age(somePersonType.getAge())
.build();
}
));
}
}
Но я получаю две ошибки компилятора:
Map.Entry::getKey
->Non-static method cannot be referenced from a static context
. entry.getValue()
->Cannot resolve method 'getValue()'
Может кто-нибудь указать мне, что я делаю неправильно? Благодарю.
Кажется, что вы забыли 'return' перед' SomeOtherPersonType.builder() ... ' –