Я хочу получить список после использования потока, а затем сопоставить объект человека с его dto.
Я сохранил «ЗНАЧЕНИЕ» как перечисление, например ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3.
Вот мои значения в Map<String (id), List<Person>>
Id, Tag, Value, Date , Message
p1, VALUE1, 10, 10-10-2000 , "Message"
p2, VALUE1, 20, 10-10-2000 , "Message"
p1, VALUE2, "Text", 10-10-2000 , "Message"
p2, VALUE2, "Text", 10-10-2000 , "Message"
p1, VALUE3, 11-11-2000, 10-10-2000 , "Message"
p2, VALUE3, 12-11-2000, 10-10-2000 , "Message"
То, что я хочу получить, показано ниже.
Tag, Id, Value, Date
VALUE1, p1, 10, "10-10-2000"
VALUE1, p2, 20, "10-10-2000"
VALUE2, p1, "Text", "10-10-2000"
VALUE2, p2, "Text", "10-10-2000"
VALUE3, p1, 11-11-2000, "10-10-2000"
VALUE3, p2, 12-11-2000, "10-10-2000"
Как видите, столбец Value имеет разные значения (String, Int, Date). Вот почему я определил ценность как объект. Я также храню дату как локальную дату.
Вот мой класс значений, показанный ниже.
public enum Value {
VALUE1,VALUE2,VALUE3
}
Вот мой класс Dto, показанный ниже.
public class PersonDto {
private Value value;
private String id;
private String date;
private Object result;
}
Как я могу это сделать?
Вот мои фрагменты кода, показанные ниже. Однако я не могу продолжать
static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
List<PersonDto > result= persons.values().stream()
.flatMap(List::stream).map(person->
String date = LocalDate.parse(person.getEventDate(), formatter) // Error
new PersonDto (person.getEvent(),person.getEmpID(),
,person.getEvent())
.collect(Collectors.toList());..
@ g00se g00se Я не могу сопоставить объект с dto, поскольку значение определяется как объект.
@ g00se Я отредактировал свой пост после переопределения коллекции.
persons.values().stream().flatMap(List::stream).map(p -> new PersonDto(...)).collect(Collectors.toList())
@英語は苦手 I revised my post. I followed your way but I cannot convert localdate to string.
У вас не может быть двух полей с одинаковыми именами value
— это не скомпилируется. Почему второе значение имеет тип Object
? Какой смысл хранить дату в виде строки?
String date = formatter.format(person.getEventDate())
@AlexanderIvanchenko Я исправил. Я поделился ответом.
Вот ответ, показанный ниже
List<PersonDto> yearlyFinancialReportDtos = persons.values().stream()
.flatMap(List::stream).map(person ->
new YearlyFinancialReportDto(person.getValue(),person .getId(),formatter.format(person .getDate())
,person .getResult()))
.collect(Collectors.toList());
Итак, вы хотите те же данные, за исключением сообщения с переставленными местами первых двух столбцов?