Как получить значение из списка, который находится в другом списке, который находится в другом списке

У меня есть класс Dto с переменными, одна из которых является другим классом. а внутри другого класса есть переменная List с другим классом.

public class GetList {
    private String id;
    private ResultGetList result;
}


public class ResultGetList {
    @JsonProperty("Customer")
    private List<CustomerGetList> customer;
}

public class CustomerGetList {
    @JsonProperty("customerId")
    private String customerId;
    @JsonProperty("bankId")
    private String bankId;
    @JsonProperty("cardholderName")
    private String cardHolderName;
    @JsonProperty("Card")
    private List<CardGetList> Card;
}

Я открываю новый класс Dto для получения необходимых переменных в вышеуказанных классах.

public class NewConDto {

    private String id; 
    private String pan;
    private String mfo;
    private String fullName;
}

Мне нужно установить значения NewConDto из вышеперечисленных классов.

 NewConDto newConDto= new NewConDto();
newConDto.setid(GetList.getResult().getCustomer()....)

я не получаю после getCustomer, потому что следующим значением является список. Мне нужно получить значение из значения списка, которое является другим классом Dto.

Вообще говоря, мне нужно что-то вроде этого:

GetList.getResult().getCustomer().foreach(.....getcustomerId());
GetList.getResult().getCustomer().foreach(.....getpan());
GetList.getResult().getCustomer().foreach(.....getmfo());

....

Как сделать для каждого, чтобы брать значение из класса. Или может есть другое решение?

Итак, вам нужно создать объект NewConDto для каждого объекта CustomerGetList? id происходит от CustomerGetList? Какой источник для других полей: pan, mfo, fullName?

Alexander Ivanchenko 10.04.2022 06:04

Я должен указать, что некоторые из ваших имен классов просто неверны. Например, GetList ... НЕ является списком. И CustomerGetList вводит в заблуждение, потому что кажется, что экземпляр представляет одного клиента, а не список клиентов. Меня поражает, что многие из ваших проблем вызваны неправильным наименованием классов; например вы думаете, что, поскольку GetList - это называется, это должен быть список. (И это не так!) Короче говоря, правильные имена классов важны для людей, читающих код, включая вас.

Stephen C 10.04.2022 06:09

Мне нужно GetList.getResult().getCustomer().foreach(.....getcustomerId‌​()); GetList.getResult().getCustomer().foreach(.....getpan()); GetList.getResult().getCustomer().foreach(.....getmfo()); GetList.getResult().getCustomer().foreach(.....getfullName()‌​);

Nodir RaPuZ 10.04.2022 06:22

Вам нужно сделать getResult() статическим, чтобы вызвать список, который (GetList.getResult())

Yogi 10.04.2022 06:42
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
4
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая

  • У вас есть правильные геттеры и сеттеры в классе, и вы не показываете их здесь, чтобы сделать код коротким)humoGetList -> экземпляр GetList
  • humoGetList.getResult() -> результаты в экземпляре ResultGetList
  • humoGetList.getResult().getCustomer() -> -> приводит к экземпляру List< CustomerGetList>

Вам нужно создать новый List newConDtoList и заполнить его объектами. Вот несколько вариантов:

public class MyProgram{
  public static void main(String[] args) {
    GetList getList = testData();

    // Option 1 : Use For Each Loop

    List<NewConDto> newConDtoList1 = new ArrayList<>();
    for (CustomerGetList customer : testData().getResult().getCustomer()){
      NewConDto newConDto =  convert(customer);
      newConDtoList1.add(newConDto);
    }

    // Option 2: Use for each
    List<NewConDto> newConDtoList2 = new ArrayList<>();
    getList.getResult().getCustomer().forEach(MyProgram::convert);

    // Option 3: Use stream

    List<NewConDto> newConDtoList3 = getList.getResult().getCustomer().stream()
      .map(MyProgram::convert)
      .collect(Collectors.toList());


  }

  private static NewConDto convert(CustomerGetList customer){
    NewConDto newConDto = new NewConDto();
    newConDto.setFullName(customer.getCardHolderName());
    newConDto.setId(customer.getBankId());
    //...
    return newConDto;
  }
  private static GetList testData(){
  ResultGetList resultGetList = new ResultGetList();

    CustomerGetList customerGetList1 = new CustomerGetList();
    customerGetList1.setBankId("bankId1");
    customerGetList1.setCardHolderName("cardHolderName1");
    customerGetList1.setCustomerId("customerId1");
    CardGetList cardList1 = new CardGetList();
    customerGetList1.setCard(Arrays.asList(cardList1));

    CustomerGetList customerGetList2 = new CustomerGetList();
    customerGetList2.setBankId("bankId2");
    customerGetList2.setCardHolderName("cardHolderName2");
    customerGetList2.setCustomerId("customerId2");
    CardGetList cardList2 = new CardGetList();
    customerGetList2.setCard(Arrays.asList(cardList2));

    GetList getList = new GetList();
    getList.setResult(resultGetList);

    return getList;
  }
}

Другие вопросы по теме