objetos llenar listas enteros ejemplos como colecciones clase java search arraylist custom-object

listas - como llenar un arraylist en java



Búsqueda en una ArrayList con objetos personalizados para ciertas cadenas (8)

Tengo una ArrayList con objetos personalizados. Quiero buscar dentro de este ArrayList para cadenas.

La clase para los objetos se ve así:

public class Datapoint implements Serializable { private String stateBased; private String name; private String priority; private String mainNumber; private String groupadress; private String dptID; public Datapoint(){ } public String getMainNumber() { return mainNumber; } public void setMainNumber(String mainNumber) { this.mainNumber = mainNumber; } public String getName() { return name; } ..and so on

Sé cómo buscar una cadena en una ArrayList pero cómo hacer eso en una ArrayList con mis objetos personalizados:

ArrayList<String> searchList = new ArrayList<String>(); String search = "a"; int searchListLength = searchList.size(); for (int i = 0; i < searchListLength; i++) { if (searchList.get(i).contains(search)) { //Do whatever you want here } }

Así que quiero tener una función para buscar en mi ArrayList con, por ejemplo, cinco objetos para todas las cadenas de "nombre".


ACTUALIZACIÓN: Uso de la sintaxis de Java 8

List<DataPoint> myList = new ArrayList<>(); //Fill up myList with your Data Points List<DataPoint> dataPointsCalledJohn = myList .stream() .filter(p-> p.getName().equals(("john"))) .collect(Collectors.toList());

Si no te importa usar un libaray externo, puedes usar Predicates de la biblioteca de Google Guava de la siguiente manera:

class DataPoint { String name; String getName() { return name; } } Predicate<DataPoint> nameEqualsTo(final String name) { return new Predicate<DataPoint>() { public boolean apply(DataPoint dataPoint) { return dataPoint.getName().equals(name); } }; } public void main(String[] args) throws Exception { List<DataPoint> myList = new ArrayList<DataPoint>(); //Fill up myList with your Data Points Collection<DataPoint> dataPointsCalledJohn = Collections2.filter(myList, nameEqualsTo("john")); }


La manera más fácil es hacer una búsqueda donde verifique si el name del atributo del objeto personalizado tiene la cadena deseada.

for(Datapoint d : dataPointList){ if(d.getName() != null && d.getName().contains(search)) //something here }

Creo que esto te ayuda.


Para que una clase personalizada funcione correctamente en colecciones, deberá implementar / anular los métodos equals() de la clase. Para ordenar también anula compareTo() .

Vea este artículo o google sobre cómo implementar esos métodos correctamente.


Probablemente algo así como:

ArrayList<DataPoint> myList = new ArrayList<DataPoint>(); //Fill up myList with your Data Points //Traversal for(DataPoint myPoint : myList) { if(myPoint.getName() != null && myPoint.getName().equals("Michael Hoffmann")) { //Process data do whatever you want System.out.println("Found it!"); } }


Use Apache CollectionUtils :

CollectionUtils.find(myList, new Predicate() { public boolean evaluate(Object o) { return name.equals(((MyClass) o).getName()); } }


prueba esto

ArrayList<Datapoint > searchList = new ArrayList<Datapoint >(); String search = "a"; int searchListLength = searchList.size(); for (int i = 0; i < searchListLength; i++) { if (searchList.get(i).getName().contains(search)) { //Do whatever you want here } }


contains() método contains() simplemente llama a equals() en los elementos de ArrayList , por lo que puede sobrecargar los equals() su clase en función de la variable de clase de name . Devuelve true de equals() si el name es igual a la String coincidente. Espero que esto ayude.


String string; for (Datapoint d : dataPointList) { Field[] fields = d.getFields(); for (Field f : fields) { String value = (String) g.get(d); if (value.equals(string)) { //Do your stuff } } }