Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

274
Vistas
Cree una lista de objetos personalizados en línea, sin una clase de modelo separada - Java

Para mantener el código mínimo, quiero poder crear una lista de un objeto personalizado en java. Similar a lo que hacemos en C# o Swift , donde definimos el constructor o los parámetros de la lista de esa manera, no tenemos que crear un objeto y un constructor separados para la lista.

Por ejemplo

 var menuList: [(category: String, name: String, ismulti: Bool)] = [ (category: "Categ1", name: "name1", ismulti: true), (category: "Categ2", name: "name2", ismulti: false), (category: "Categ3", name: "name3", type: ismulti: true), ]

Aquí var menuList: [(category: String, name: String, ismulti: Bool)] redujo la necesidad de un objeto y un constructor. ¿Hay algo similar en Java?

por lo mismo que hice en java.

 public class Menu{ String category; String name; boolean isMulti; public Menu(String category, String name, boolean isMulti) { this.category = category; this.name = name; this.isMulti = isMulti; } public List<Menu> menuList = new ArrayList<Menu>() {{ add(new Menu("categ1","name1",true)); add(new Menu("categ2","name2",true)); add(new Menu("categ3","name3",true)); }}; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Vale la pena mencionar cuál es esta sintaxis:

 public List<Menu> menuList = new ArrayList<Menu>() {{ add(new Menu("categ1","name1",true)); add(new Menu("categ2","name2",true)); add(new Menu("categ3","name3",true)); }}

Esto se llama - "inicialización de doble llave" y bajo el capó extiende de forma anónima la clase ArrayList, generalmente debe usarse con precaución, puede leer más aquí

Volviendo a la pregunta original: dependiendo de lo que necesite, qué versión de Java esté usando y si puede/quiere usar algunas bibliotecas externas, tiene estas opciones, tenga en cuenta que Arrays.asList() y List.of() regresan una lista que no soporta todas las operaciones, como add() o remove() y en el último caso, también set() . También con respecto al constructor, como otros ya mencionaron, podría usar el proyecto Lombok para generar un constructor para usted:

Java 9

 List<Menu> collect = List.of( new Menu("categ1","name1",true), new Menu("categ2","name2",true), new Menu("categ3","name3",true));

Java 8

 List<Menu> collect = Stream.of( new Menu("categ1","name1",true), new Menu("categ2","name2",true), new Menu("categ3","name3",true)) .collect(Collectors.toList());

Java antes de las 8

 List<Menu> collect = Arrays.asList( new Menu("categ1", "name1", true), new Menu("categ2", "name2", true), new Menu("categ3", "name3", true));

usando guayaba

Guava es una biblioteca externa, véala aquí .

 List<Menu> collect = Lists.newArrayList( new Menu("categ1","name1",true), new Menu("categ2","name2",true), new Menu("categ3","name3",true));

Alternativamente, podría escribir su propia clase como lo hizo @ernest_k, lo que realmente le brinda una gran flexibilidad cuando trabaja con diferentes tipos.

over 4 years ago · Santiago Trujillo Denunciar

0

Solo para agregar una tercera solución (como han señalado las otras respuestas, no puede hacer esto en Java, no existe tal sintaxis).

Una cosa que puede hacer es crear su propia clase Tuple reutilizable . Se verá obligado a tener una clase por número de elementos, pero puede reutilizarla con varias combinaciones de tipos.

 static class Tuple3<T, U, V> { final T _1; final U _2; final V _3; private Tuple3(T t, U u, V v) { this._1 = t; this._2 = u; this._3 = v; } public static <T, U, V> Tuple3<T, U, V> of(T t, U u, V v) { return new Tuple3<>(t, u, v); } }

Luego (con la misma clase de tupla, puede tener diferentes sabores de esto):

 //menuList is a List<Tuple3<String, String, Boolean>> var menuList = List.of( Tuple3.of("Categ1", "name1", true), Tuple3.of("Categ2", "name2", false), Tuple3.of("Categ3", "name3", true) ); //registration is a List<Tuple3<String, LocalDate, Double>> var registrationData = List.of( Tuple3.of("John", LocalDate.EPOCH, 1.1), Tuple3.of("James", LocalDate.now(), 2.2), Tuple3.of("Ron", LocalDate.now(), 3.3) );

Personalmente, haría públicos los campos _1 , _2 y _3 , pero esto es una preferencia. Puede crear getters para ellos si lo prefiere (quizás _1() pero no puede ser lo suficientemente limpio).


Supongo que Java 11+, pero puede hacerlo fácilmente compatible con versiones anteriores simplemente eliminando var y List.of

over 4 years ago · Santiago Trujillo Denunciar

0

Podría usar Lombok para generar el constructor por usted. Eso realmente no resuelve su problema, pero al menos tiene un código más corto.

Y podría usar el operador de diamante para new ArrayList<>() o usar Arrays.asList() para crear una nueva Lista.

 @AllArgsConstructor public class Menu { String category; String name; boolean isMulti; public List<Menu> menuList = List.of( // if Java < 9, use Arrays.asList() new Menu("categ1", "name1", true), new Menu("categ2", "name2", true), new Menu("categ3", "name3", true) ); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda