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

184
Views
Obtenga múltiples elementos de la lista por índices en tiempo constante

¿Cuál es la mejor manera de obtener múltiples elementos de una lista por sus índices en tiempo constante?

Si tengo una matriz:

 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e");

Y tengo una lista/matriz con índices:

 List<Integer> indices = new ArrayList<>(); indices.add(0); indices.add(2); indices.add(3);

¿Cómo puedo obtener a, c, d en tiempo constante? Necesito algo como esto:

 List<String> filtered = list.filterByIndex(indices); filtered.stream().forEach(x -> System.out.print(x)); // output:"acd"

ACTUALIZACIÓN: La impresión de los artículos no tiene que ser en tiempo constante, por supuesto, solo la recolección de artículos. El código anterior de imprimir los elementos es solo para fines de demostración.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Yo sugiero:

 List<String> filtered = indices.stream() .map(list::get) .collect(Collectors.toList());

El resultado es el deseado:

 [a, c, d]

Suponiendo que la lista tiene acceso en tiempo constante (como lo tiene ArrayList ), esto se ejecuta en un tiempo que es lineal en el número de elementos solicitados (longitud de los indices ), pero no aumenta con la longitud de la lista list . Como se ha discutido en los comentarios, esto es lo mejor que podemos hacer.

Editar: Honestamente, no sé si el paso de recopilación anterior está en tiempo lineal en la cantidad de elementos recopilados. Posiblemente, las extensiones de la capacidad de la lista cuestan tiempo, y probablemente esto no requiera más que un tiempo lineal. Si necesitamos estar seguros, debemos recopilar de esta manera:

 .collect(Collectors.toCollection(() -> new ArrayList<>(indices.size())));

Esto asegura que se asigne una lista con la capacidad adecuada desde el principio para que no se necesiten extensiones.

over 4 years ago · Santiago Trujillo Report

0

Para crear una lista:

 List<String> filtered = new ArrayList<>(); indices.forEach(index -> filtered.add(list.get(index))); System.out.println(filtered);

Solución de flujo y mapa

 List<String> filtered = indices.stream() .map(index -> list.get(index)) .collect(Collectors.toList());

Si solo necesita una cadena, puede hacerlo con StringBuilder

 StringBuilder sb = new StringBuffer(); indices.forEach(index -> sb.append(list.get(index))); System.out.println(sb.toString());
over 4 years ago · Santiago Trujillo Report

0

Podrías hacer algo como esto:

 IntStream.range(0, list.size()) .boxed() .filter(indices::contains) .map(list::get) .forEach(System.out::println);
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!