Duda con operador ternario

B

Dado este input

5
12 0 1 78 12
2
Insert
5 23
Delete
0

Donde 5 es el número de enteros que tendrá la línea siguiente y 2 el número de instrucciones que tendrás que ejecutar sobre esa lista de enteros pudiendo ser estas o Insert (índice. valor) o Delete (índice), mi código es el siguiente:

package com.HackerRank;

import java.util.*;

public class Solution {

public static void main(String[] args) {
	final Scanner sc = new Scanner(System.in);
	final List<Integer> listOfIntegers = new ArrayList<Integer>();

	int n = sc.nextInt();
	for (int i = 0; i < n; i++)
		listOfIntegers.add(sc.nextInt());

	n = sc.nextInt();
	for (int i = 0; i < n; i++) {
		final Perform perform = "Insert".equals(sc.next()) ? (x) -> x.add(sc.nextInt(), sc.nextInt()) : (x) -> x.remove(sc.nextInt());
		perform.action(listOfIntegers);
	}
	listOfIntegers.forEach(k -> System.out.print(k + " "));
	sc.close();
}

interface Perform {
	void action(List<Integer> listOfIntegers);
}
}

Como el ejercicio en sí no tenía mucha chicha y estoy intentando habituarme a normalizar el uso de lambdas, lo he planteado así. El problema que me encuentro es que a pesar de que a priori debería de hacerlo bien, el programa se me queda pillado. Le he pasado el debugger y hace una iteración extraña en el "else" del operador ternario y como es un código delicado en el sentido de ir adquiriendo valores en orden, la duda es cómo itera exactamente el operador ternario ya que haciéndolo así:

package com.HackerRank;

import java.util.*;

public class Solution {

public static void main(String[] args) {
	final Scanner sc = new Scanner(System.in);
	final List<Integer> listOfIntegers = new ArrayList<Integer>();

	int n = sc.nextInt();
	for (int i = 0; i < n; i++)
		listOfIntegers.add(sc.nextInt());

	n = sc.nextInt();
	for (int i = 0; i < n; i++) {
		final Perform perform;
		if ("Insert".equals(sc.next()))
			perform = (x) -> x.add(sc.nextInt(), sc.nextInt());
		else
			perform = (x) -> x.remove(sc.nextInt());
		perform.action(listOfIntegers);
	}
	listOfIntegers.forEach(k -> System.out.print(k + " "));
	sc.close();
}

interface Perform {
	void action(List<Integer> listOfIntegers);
}
}

que en principio debería ser lo mismo, no me da ningún problema ni se queda pillado. ¿Hace dos checks o algo así? Lo he intentado buscar por mi cuenta pero lo único que encuentro son explicaciones de cómo funciona el operador en sí.

Ranthas

Prueba con esto

Perform perform = (int x) -> "Insert".equals(sc.next()) ? x.add(sc.nextInt(), sc.nextInt()) : x.remove(sc.nextInt());
B

No sé qué pudo ser la verdad.

Al final me acabé rayando e hice submit de ambas soluciones y ambas dieron 100% en los test cases de la web así que cerré todo lo que tenía abierto, lo volví a abrir, ejecuté ambas soluciones y funcionó because magic. Alguna combinación de teclas o algo que habría ejecutado algún proceso o cambiado algún modo, a saber. Lo importante es que me ha quedado claro que funcionan exactamente igual en lo que a checks se refiere, que era lo que me estaba volviendo picha.

Usuarios habituales