Hidden Java Features - Releasing ArrayList Initializers / Instances

In the hidden features of Java, I was interested in the answer about instance initializers .

I was wondering how to change this line:

List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};

so that it does the same job with nested Arraylists:

ArrayList<ArrayList<Integer>> numbers = ...

perhaps?

+5
source share
5 answers
List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};

I do not recommend this approach, as it creates a (anonymous) class for no good reason.

Use either:

List<Integer> numbers = Arrays.asList(1, 2);

or

List<Integer> numbers = new ArrayList<Integer>(Arrays.asList(1, 2));

For two levels you can use:

List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(2,3,4));

With static imports, you can even reduce it to this if you really want to:

List<List<Integer>> numbers = asList(asList(1, 2), asList(2,3,4));
+4
source

, Arrays.asList varargs, :

List<List<Integer>> numbers = new ArrayList<List<Integer>>();
numbers.add(Arrays.asList(1,2));
numbers.add(Arrays.asList(3,4));

, :

List<List<Integer>> numbers = new ArrayList<List<Integer>>() {{add(Arrays.asList(1,2)); add(Arrays.asList(3,4));}};

, . , . . Scala, Groovy Clojure, .

+3

, , ArrayLists:, , ...

    List<ArrayList<Integer>> numbers = new ArrayList<ArrayList<Integer>>()
    {
        {
            add(new ArrayList<Integer>()
            {
                {
                    add(1);
                    add(2);
                }
            });
            add(new ArrayList<Integer>()
            {
                {
                    add(1);
                    add(2);
                }
            });
        }
    };

( !)

    List<ArrayList<Integer>> numbers = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>();
    list1.add(1);
    list1.add(2);
    list2.add(1);
    list2.add(2);
    numbers.add(list1);
    numbers.add(list2);

Arrays.asList(1, 2), , .

+2

ArrayList. , ArrayList, "" ... , .

, ​​ Google Guava.

Guava Lists.newArrayList(E...):

    import com.google.common.collect.Lists;


    List<ArrayList<Integer>> numbers = Lists.newArrayList(
            Lists.newArrayList(1, 2),
            Lists.newArrayList(3, 4)
    );

, , List ( ):

    import com.google.common.collect.Lists;


    List<List<Integer>> numbers = Lists.<List<Integer>>newArrayList(
            Lists.newArrayList(1, 2),
            Lists.newArrayList(3, 4)
    );

, , ImmutableList:

    import com.google.common.collect.ImmutableList;


    List<List<Integer>> numbers = ImmutableList.<List<Integer>>of(
            ImmutableList.of(1, 2),
            ImmutableList.of(3, 4)
    );
+2
source

Just replace intwith the objectArrayList<integer>

List<ArrayList<Integer>> numbers = new ArrayList<ArrayList<Integer>>() {

            {
                add(new ArrayList<Integer>());
                add(new ArrayList<Integer>());
            }
        };
+1
source

All Articles