Одна строка для инициализации списка из другого списка - PullRequest
0 голосов
/ 08 февраля 2019

Я хотел бы инициализировать Список моего Dto кратчайшим способом.Прямо сейчас я использую:

public List<SomeItemDto> itemsToDto(List<SomeItem> items) {
    List<SomeItemDto> itemsDto = new ArrayList<SomeItemDto>();
    for (SomeItem item : items) {
        itemsDto.add(itemToDto(item));
    }
    return itemsDto;
}

Есть ли способ сделать его однострочным?

Ответы [ 3 ]

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

Вы можете использовать map, который в основном применяет функцию к элементу

List<SomeItemDto> itemsDto = items.stream().map(item -> itemToDto(item))
                                  .collect(Collectors.toList())
0 голосов
/ 09 февраля 2019

Если вы открыты для использования сторонней библиотеки, вы можете использовать утилиту ListIterate из Eclipse Collections с любым List.

List<SomeItemDto> itemsDto = ListIterate.collect(items, this::itemToDto);

Если бы элементы были MutableList из Коллекций Eclipse, вы можете использовать API непосредственно в списке следующим образом:

List<SomeItemDto> itemsDto = items.collect(this::itemToDto); 

Примечание: я являюсь коммиттером для Коллекций Eclipse.

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

Вы можете сделать это, используя stream и далее map ping как:

return items.stream()
            .map(item -> itemToDto(item)) // map SomeItem to SomeItemDto
            .collect(Collectors.toList());
...