Tengo valores que deben agregarse a ArrayList porque deben estar conectados entre sí y, al mismo tiempo, deben poder eliminarse. el artilugio en mi cabeza es algo similar a una batalla naval. Tengo casillas en las que hay que hacer clic. cuando hace clic en uno de ellos a la derecha, el cuadro se vuelve verde. cuando haces clic en todas las casillas recortadas, se convierten en casillas doradas.

Mi pregunta es: ¿hay un wat más sencillo y sencillo para agregar los valores a continuación a una ArrayList? Probé algunos forloops pero no funcionaron;

ArrayList[][] Boxes = new ArrayList[6][];
  
   Boxes[0][0].add(1110);
   Boxes[0][1].add(1210);
   Boxes[0][2].add(1310);
   Boxes[0][3].add(1410); 
   
   Boxes[1][0].add(2110);
   Boxes[1][1].add(2210);
   Boxes[1][2].add(2310);
   
   Boxes[2][0].add(2121);
   Boxes[2][1].add(2221);
   Boxes[2][2].add(2321);
   
   Boxes[3][0].add(3110);
   Boxes[3][1].add(3210);
   
   Boxes[4][0].add(3120);
   Boxes[4][1].add(3220);
   
   Boxes[5][0].add(3130);
   Boxes[5][1].add(3230);
0
Benniesmalls 21 oct. 2020 a las 21:56

1 respuesta

La mejor respuesta

Si proporciona un método auxiliar para crear una matriz de listas, la inicialización puede compactarse:

// warning about rawtypes
private static ArrayList[] buildArrayOfLists(Integer... arr) {
    return Arrays.stream(arr)
                 .map(i -> new ArrayList<>(Arrays.asList(i)))
                 .toArray(ArrayList[]::new);
}

// usage -- warning about rawtypes
ArrayList[][] boxes = new ArrayList[][] {
      buildArrayOfLists(1110, 1210, 1310, 1410),
      buildArrayOfLists(2110, 2210, 2310),
      buildArrayOfLists(2121, 2221, 2321),
      buildArrayOfLists(3110, 3210),
      buildArrayOfLists(3120, 3220),
      buildArrayOfLists(3130, 3230)
};

Arrays.stream(boxes)
      .map(Arrays::toString)
      .forEach(System.out::println);

Salida:

[[1110], [1210], [1310], [1410]]
[[2110], [2210], [2310]]
[[2121], [2221], [2321]]
[[3110], [3210]]
[[3120], [3220]]
[[3130], [3230]]

Actualizar
Para deshacerse de las advertencias sobre el uso de tipos sin procesar para ArrayList[][] y usar List general en lugar de una implementación específica, es posible refactorizar el método y su uso de una manera más segura y sin advertencias:

private static <T> List<?>[] arrayOfLists(T... arr) {
    return Arrays.stream(arr)
                 .map(i -> new ArrayList<>(Arrays.asList(i)))
                 .toArray(List<?>[]::new);
}

// usage - no warning about rawtypes, explicitly suppress unchecked
@SuppressWarnings("unchecked")
List<Integer>[][] safeBoxes = (List<Integer>[][]) new List<?>[][] {
      arrayOfLists(1110, 1210, 1310, 1410),
      arrayOfLists(2110, 2210, 2310),
      arrayOfLists(2121, 2221, 2321),
      arrayOfLists(3110, 3210),
      arrayOfLists(3120, 3220),
      arrayOfLists(3130, 3230)
};
0
Alex Rudenko 21 oct. 2020 a las 22:21