valor retornar operadores metodo logicos ejemplos definicion declarar comparar booleano java java-8 java-stream

retornar - operadores logicos en java ejemplos



Stream Way para obtener el índice del primer elemento coincidente booleano (3)

De vez en cuando no hay un zipWithIndex zipWithIndex en java. Así que me encontré con algo así:

OptionalInt indexOpt = IntStream.range(0, users.size()) .filter(i -> searchName.equals(users.get(i))) .findFirst();

Alternativamente, puedes usar zipWithIndex de la librería protonpack

Nota

Esa solución puede llevar mucho tiempo si users.get no es una operación de tiempo constante.

Esta pregunta ya tiene una respuesta aquí:

Tengo una List<Users> . Quiero obtener el índice del (primer) usuario en la transmisión con un nombre de usuario en particular. No quiero realmente exigir que el User sea .equals() a algún User descrito, solo que tenga el mismo nombre de usuario.

Puedo pensar en formas feas de hacer esto (iterar y contar), pero parece que debería haber una buena manera de hacerlo, probablemente utilizando Streams. Hasta ahora lo mejor que tengo es:

int index = users.stream() .map(user -> user.getName()) .collect(Collectors.toList()) .indexOf(username);

Cuál no es el peor código que he escrito, pero no es genial. Tampoco es tan flexible, ya que se basa en la existencia de una función de mapeo a un tipo con una función .equals() que describe la propiedad que está buscando; Preferiría tener algo que pudiera funcionar para una Function<T, Boolean> arbitraria Function<T, Boolean>

Alguien sabe como?


Prueba esto:

IntStream.range(0, users.size()) .filter(userInd-> users.get(userInd).getName().equals(username)) .findFirst() .get();


Puedes probar la biblioteca de StreamEx hecha por Tagir Valeev . Esa biblioteca tiene un método #indexOf conveniente.

Este es un ejemplo simple:

List<User> users = asList(new User("Vas"), new User("Innokenty"), new User("WAT")); long index = StreamEx.of(users) .indexOf(user -> user.name.equals("Innokenty")) .getAsLong(); System.out.println(index);