Передача списка в качестве параметра в Java

#java #arrays #arraylist

#java #массивы #arraylist

Вопрос:

У меня есть список этого.

 [Attachments(filename=a.json,  id=ATT-mXRJB-BmVzs, contentType=application/json),
 Attachments(filename=b.pdf,  id=ATT-y7Qr2-8RqkW, contentType=application/pdf ),
 Attachments(filename=c.docx,  id=ATT-mYh3z-3YJ37, contentType=application/vnd.openxmlformats-officedocument.wordprocessingml.document)]
  

Мне нужно выполнить итерацию и получить идентификаторы из этого списка и передать каждый идентификатор в качестве параметра для вызова API — attachments/{{attachmentid}}/retrieve .

Я могу извлекать идентификаторы и сохранять их на карте. (Не уверен, правильно ли здесь использовать Map?) Это фрагмент кода, который я написал, но я не могу продолжить после этого.

   Map<String, String> attachmentMap = new HashMap<String, String>();
    Optional.ofNullable(attList)
                .orElse(Collections.emptyList())
                .forEach(aList -> {
                     attachmentMap.put("id", aList.getId());
                    LOGGER.debug("Attachment ids : {}",attachmentMap);
                });
    

        
  

2020-08-27 22:21:49.967 DEBUG 18644 — [nio-8081-exec-2] c.f.p.h.s.i.PlServiceImpl : Идентификаторы вложений: {id=ATT-mXRJB-BmVzs}
2020-08-27 22:21:49.967 DEBUG 18644 — [nio-8081-exec-2] c.f.p.h.s.i.PlServiceImpl : Идентификаторы вложений: {id=ATT-y7Qr2-8RqkW}
2020-08-27 22:21:49.967 DEBUG 18644 — [nio-8081-exec-2] c.f.p.h.s.i.PlServiceImpl : Идентификаторы вложений: {id=ATT-mYh3z-3YJ37}

   URI uri = UriComponentsBuilder.
                    .pathSegment(ATTACHMENTS)
                    .pathSegment(?)   //what to give here? 
                    .pathSegment(RETRIEVE)
                    .build().toUri();
        LOGGER.debug("URL to Retrieve  : {}", uri.toString());
  

Я могу печатать идентификаторы вложений — но как мне передать каждый из них в качестве параметра в вызов API, подобный этому — attachments/{{attachmentid}}/retrieve

Ответ №1:

Пожалуйста, используйте foreach для перебора map и вызова метода http-вызова

 Map<String, String> attachmentMap = new HashMap<String, String>();
    Optional.ofNullable(attList)
                .orElse(Collections.emptyList())
                .forEach(aList -> {
                     attachmentMap.put("id", aList.getId());
                     httpCall(aList.getId());
                    LOGGER.debug("Attachment ids : {}",attachmentMap);
                });
  

создайте метод Http-вызова с идентификатором параметра (также с другими необходимыми параметрами) и используйте метод для вызова.

 public static void httpCall(id){
  URI uri = UriComponentsBuilder.
                    .pathSegment(ATTACHMENTS)
                    .pathSegment(id)   //what to give here? 
                    .pathSegment(RETRIEVE)
                    .build().toUri();
        LOGGER.debug("URL to Retrieve  : {}", uri.toString());
}
  

Ответ №2:

Почему бы просто не перебрать Attachments список напрямую и не извлечь идентификатор из каждого Attachment и передать его UriComponentsBuilder для построения URI. Вам не нужна дополнительная структура данных для хранения идентификаторов.

 List<URI> uriList = new ArrayList<>();

for(Attachment attachment: Attachments){
   String id = attachment.getId();
   if (id != null) {
       URI uri = UriComponentsBuilder.
                .pathSegment(ATTACHMENTS)
                .pathSegment(id)
                .pathSegment(RETRIEVE)
                .build().toUri();
       uriList.add(uri); // or you can call the uri directly from here using your http client.
   }
}