Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

71
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!