ways una tipo through son saber recorrer que programacion programa posicion otra orientada objetos objeto metodos metodo mayor manejo listas lista igual extraer example evaluar español entries ejemplos ejemplo diferentes declarar declaracion crear creacion con comparar como clases clase caracteres caracter cadenas cadena buscar atributos array agregar java string map iterator set

una - ¿Cómo comprobar en java si Set contiene un objeto con algún valor de cadena?



recorrer un arraylist de objetos en java (4)

En general, no. Debe iterar sobre el conjunto y verificar cada objeto para ver si la propiedad es igual al valor que está buscando. Esta es una operación O(n) .

Hay una situación en la que podrías hacerlo sin iterar. Si el método equals su objeto se define en términos de igualdad de esa propiedad de String , y si el método hashCode también se implementa correctamente, puede usar el hashSet.contains para encontrar un objeto con el valor correcto en tiempo O(1) sin necesidad de iterando sobre el conjunto.

Como mencioné, este es un caso de uso muy específico y no una solución general. Podría ser útil si la cadena fuera algún tipo de identificador único, pero no funcionará para su caso de uso específico.

También es posible que desee considerar otras colecciones que se adaptarían mejor a su caso de uso. Por ejemplo, si usa Guava, podría considerar el uso de un Multimap .

Relacionado

Tengo conjunto de objetos. Cada objeto tiene valor de cadena.

Necesito seleccionar todos los objetos que tengan this valor igual a "dirección".

¿Es posible sin iterar sobre el conjunto?

Gracias.


Sé que esta es una vieja pregunta, pero ...

Respuesta corta: NO, no es posible ...

El uso de equals() o contains() según lo recomendado por otros miembros se debe restringir a situaciones en las que los atributos que está utilizando para el filtrado son en realidad parte de la identidad de los objetos. No veo otra manera que un algoritmo O (n).

Si está considerando funciones nativas, Java 8 trajo la API de Stream y los conceptos de Programación Funcional , lo que permite llamadas de bucle más fáciles y limpias. No obstante, vale la pena señalar que para su situación todos los objetos de su colección deberán ser revisados, por lo que la complejidad seguirá siendo O (n).

Ejemplo con el stream().filter() Java 8. stream().filter()

public static void main(String[] args...){ Set<MyClass> mySet = new HashSet<>(); mySet.add(new MyClass("Obj 1", "Rio de Janeiro")); mySet.add(new MyClass("Obj 2", "London")); mySet.add(new MyClass("Obj 3", "New York")); mySet.add(new MyClass("Obj 4", "Rio de Janeiro")); Set<MyClass> filtered = mySet.stream() .filter(mc -> mc.getCity().equals(''Rio de Janeiro'')) .collect(Collectors.toSet()); filtered.forEach(mc -> System.out.println("Object: "+mc.getName())); // Result: // Object: Obj 1 // Object: Obj 4 }


Sí, esto es posible sobrescribiendo el método equals() .

@Override public boolean equals (Object object) { }

Solo quieres comprobar que todo funciona en el método de iguales.

Código:

package com.webapp.test; import java.util.ArrayList; import java.util.List; public class EmployeeModel { public EmployeeModel(String name, String designation, long age) { this.name = name; this.designation = designation; this.age = age; } private String name; private String designation; private long age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public long getAge() { return age; } public void setAge(long age) { this.age = age; } @Override public boolean equals (Object object) { boolean result = false; if (object == null || object.getClass() != getClass()) { result = false; } else { EmployeeModel employee = (EmployeeModel) object; if (this.name == employee.getName() && this.designation == employee.getDesignation() && this.age.equals(employee.getAge())) { result = true; } } return result; } } public static void main(String args[]) { EmployeeModel first = new EmployeeModel("Sameer", "Developer", 25); EmployeeModel second = new EmployeeModel("Jon", "Manager", 30); EmployeeModel third = new EmployeeModel("Priyanka", "Tester", 24); List<EmployeeModel> employeeList = new ArrayList<EmployeeModel>(); employeeList.add(first); employeeList.add(second); employeeList.add(third); EmployeeModel checkUserOne = new EmployeeModel("Sameer", "Developer", 25); System.out.println("Check checkUserOne is in list or not "); System.out.println("Is checkUserOne Present = ? " + employeeList.contains(checkUserOne)); EmployeeModel checkUserTwo = new EmployeeModel("Tim", "Tester", 24); System.out.println("Check checkUserTwo is in list or not"); System.out.println("Is checkUserTwo Present = ? " + employeeList.contains(checkUserTwo)); }

Salida:

Check checkUserOne is in list or not Is checkUserOne Present = ? true Check checkUserTwo is in list or not Is checkUserTwo Present = ? false