Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

74
Visualizações
Parte común de tres ArrayList

Tengo un controlador con algún @RequestParam(requerido = falso) que tiene que devolver todos los medicamentos con algunos filtros si existen, servicio para este controlador, que contiene lógica para él, pero no funciona. El problema principal es que tengo 3 ArrayList y no puedo encontrar todos los elementos que existen en los tres ArrayLists :)

 public List<Medicine> readAllMedicine(Double lessThenPrice, Double moreThenPrice, String name) { //when lessThenPrice < moreThenPrice, result of their queries will not have general elements if ((lessThenPrice != null && moreThenPrice != 0) && lessThenPrice < moreThenPrice) { return Collections.emptyList(); } List<Medicine> resultList = new ArrayList<>(); List<Medicine> lessList = new ArrayList<>(); List<Medicine> moreList = new ArrayList<>(); List<Medicine> nameList = new ArrayList<>(); //checking if there are arguments from the controller if (lessThenPrice != null) { lessList.addAll(medicineDao.findMedicinesByPriceIsLessThan(lessThenPrice)); } if (moreThenPrice != null) { moreList.addAll(medicineDao.findMedicinesByPriceIsGreaterThan(moreThenPrice)); } if (name != null) { nameList.addAll(medicineDao.findMedicinesByName(name)); } //saving general elements //this part is not working if (!lessList.isEmpty() || !moreList.isEmpty() || !nameList.isEmpty()) { List<Medicine> temp = new ArrayList<>(); //it will contain general part of lessList and moreList for (Medicine medicine : lessList) { if (moreList.contains(medicine)) { temp.add(medicine); } } for (Medicine medicine : nameList) { if (temp.contains(medicine)) { resultList.add(medicine); } } return resultList; } //if there is no args, just return all medicines return medicineDao.findAll(); }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Una opción para obtener todos los elementos comunes de varias listas sería iterar en la primera lista y filtrar todos los elementos que existen en todas las demás listas, por lo que:

 List<Medicine> resultList = lessList.stream() .filter(moreList::contains) .filter(namesList::contains) .collect(Collectors.toList());

Si bien esto funciona, en el caso de listas más grandes, puede considerar usar HashSets en lugar de listas, para un mejor rendimiento.

Además, este código asume que la clase Medicine tiene una implementación adecuada para equals y hashcode .

over 4 years ago · Santiago Trujillo Relatório

0

El método Collection#retainAll() solo conservará los elementos que aparecen en otra Collection ; en otras palabras, la intersección de dos colecciones. Úselo dos veces para obtener la intersección de tres colecciones:

 List<String> list1 = List.of("a", "b", "c", "q"); List<String> list2 = List.of("b", "d", "e", "q"); List<String> list3 = List.of("b", "q", "r", "s"); List<String> intersection = new ArrayList<String>(list1); intersection.retainAll(list2); intersection.retainAll(list3); System.out.println(intersection); // [b, q]
over 4 years ago · Santiago Trujillo Relatório

0

La mejor manera es usar el método de retención que elimina todos los elementos poco comunes de la lista. https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#retainAll(java.util.Collection)

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda