Java 8, corriente con otro índice de la Lista basa en

QA_Col:

Tengo este código

List<Integer> numbers = new ArrayList<>(30, 25, 17, 12 ,8, 5, 3, 2));
List<Integer> indices = new ArrayList<>(5, 3, 2));
Integer newNumber = 1;
for (int i = indices.size() - 1; i >= 0; i--) {
  newNumber *= (numbers.get(indices.get(i)));
}

newNumber estarán: 5*12*17 = 1020

Es posible hacer uso de la corriente a reducir?

Más tarde tengo que quitar los índices de los números originales (que estaba pensando en el filtro, pero el objetivo no es el índice de objeto Integer).

List<Integer> newNumbers = new ArrayList<>(numbers);
for (int i = indices.size() - 1; i >= 0; i--) {
  newNumbers.remove(indices.get(i).intValue()); // Remove position
}

Alternativamente, estaba pensando en este código.

List<Integer> newNumbers2 = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
  if (!indices.contains(i)) {
    newNumbers2.add(numbers.get(i));
  }
}

¿Es posible hacerlo utilizando corriente?

Gracias.

Ravindra Ranwala:

Sí, puede hacerlo utilizando la reducción simple. El elemento de identidad de la la reducción es 1 en este caso.

int product = indices.stream().mapToInt(numbers::get).reduce(1, (n1, n2) -> n1 * n2);

La respuesta a esta última pregunta sería,

Set<Integer> indicesSet = new HashSet<>(indices);
List<Integer> newNumbers = IntStream.range(0, numbers.size())
    .filter(n -> !indicesSet.contains(n))
    .mapToObj(n -> numbers.get(n))
    .collect(Collectors.toList());

En matemáticas, un elemento de identidad es un tipo especial de elemento de un conjunto con respecto a una operación binaria en ese conjunto, lo que deja cualquier elemento del conjunto sin cambios cuando se combina con él.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=190774&siteId=1
Recomendado
Clasificación