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

186
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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