Получить список ArrayList

#java #spring

Вопрос:

Я хочу создать массив данных и вернуть его через точку покоя. Я попробовал это:

 @Service
public class CardBrandsListService {

    public ArrayList<String> getCardBrandsList() {

        ArrayList<String> list = new ArrayList<String>();

        list.add("visa");
        list.add("master");
        list.add("Intl Maestro");
        list.add("amex");

        return list;
    }
}
 

Конечная точка отдыха:

 @GetMapping("/card_brand/list")
    public ResponseEntity<?> getCurruncy() {
        return ResponseEntity.ok(cardBrandsListService.getCardBrandsList().entrySet().stream()
                .map(g -> new CardBrandsListDTO(g.getValue())).collect(Collectors.toList()));
    }
 

DTO:

 public class CardBrandsListDTO {

    private String card_brand;

    public String getCard_brand() {
        return card_brand;
    }

    public void setCard_brand(String card_brand) {
        this.card_brand = card_brand;
    }
}
 

Но я получаю ошибку: The method entrySet() is undefined for the type ArrayList<String> каков правильный wya для отображения ArrayList?

Комментарии:

1. Звоните stream() прямо по списку .

2. Теперь я понимаю, что метод GetValue() не определен для строки типа

3. список-это не Карта, у Карты есть метод набора записей, у Списка-нет. Насколько трудно это понять?

4. Как исправить следующую ошибку?

5. Плохое название. Перепишите, чтобы обобщить вашу конкретную техническую проблему.

Ответ №1:

Ваша конечная точка rest должна выглядеть следующим образом:

 @GetMapping("/card_brand/list")
public ResponseEntity<List<CardBrandsListDTO>> getCurruncy() {
    return ResponseEntity.ok(cardBrandsListService.getCardBrandsList().stream()
            .map(g -> new CardBrandsListDTO(g)).collect(Collectors.toList()));
 

Вы вызываете entrySet() , который используется для получения набора записей объекта карты (которого у вас нет). Кроме того, внутри функции map ваша переменная g является строкой (поскольку вы возвращаете ArrayList<String> значение), поэтому вы можете напрямую передать ее конструктору. И вы также можете напрямую установить правильный тип для ResponseEntity этого.

Обновить:

И вам нужен соответствующий конструктор:

 public class CardBrandsListDTO {

    private String card_brand;

    public CarBrandsListDTO(String card_brand) {
        this.car_brand = car_brand;
    }

    //getter and setter
}
 

Кстати, я бы посоветовал вам переименовать DTO (для удобства понимания), а также поле внутри него (чтобы следовать соглашениям об именовании).

Комментарии:

1. Я получаю конструктор CardBrandsListDTO(Строка) не определен

2. Есть ли решение без добавления конструктора в CardBrandsListDTO?

3. Да, который будет выглядеть так: .map(g -> { CardBrandsListDTO dto = новый CardBrandsListDTO(); dto.setCard_brand(dto); возврат dto; }