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