以更易读的方式在ArrayList中添加元素

时间:2013-05-14 09:42:20

标签: java list arraylist

我在下面的代码段中添加了ArrayList

中的元素
List <Integer> myList = new  ArrayList();
myList.add(1);
myList.add(2);
myList.add(3);
myList.add(4);

我正在寻找更加可读和优雅的方式来添加ArrayList中的元素,如下所示。我知道下面是不允许的,但还有其他任何可读/优雅的方式吗?

myList.add(1).add(2).add(3).add(4)

更新: - 我在java 1.6上

8 个答案:

答案 0 :(得分:11)

在实例化之前知道元素时:

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

或者如果您想将它们添加到现有列表中:

List<Integer> myList = new ArrayList<>();
// do stuff
myList.addAll(Arrays.asList(1, 2, 3, 4));

为了使其更具可读性,您可以

import static java.util.Arrays.asList;

并简单地使用

List<Integer> myList = new ArrayList<>(asList(1, 2, 3, 4));

List<Integer> myList = new ArrayList<>();
// do stuff
myList.addAll(asList(1, 2, 3, 4));

如果您知道自己永远不想在列表中添加更多元素,只需编写

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

或使用静态导入:

List<Integer> myList = asList(1, 2, 3, 4);

答案 1 :(得分:4)

Guava方式(尽管List是不可变的):

ImmutableList<Integer> myList = ImmutableList.<Integer>builder()
                             .add(1)
                             .add(2)
                             .add(3)
                             .build();

或者这样:

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

List <Integer> myList = Ints.asList(1,2,3);

答案 2 :(得分:2)

如果你觉得这是可读的,这里还有一个方法

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

答案 3 :(得分:2)

您可以通过扩展ArrayList链接方法。然后添加一个方法addMe,它将返回新的ArrayList

class chainedArrayList extends ArrayList
{
     public chainedArrayList addMe(Object o)
     {add(o);return this;}
}

您现在可以链接方法

mychainedArrayList.addMe(1).addMe(2).addMe(3).addMe(4);

答案 4 :(得分:1)

使用GS Collections,如果您想要一个可变的整数列表,则可以使用以下内容:

MutableList<Integer> list1 = FastList.<Integer>newList().with(1).with(2).with(3).with(4);
MutableList<Integer> list2 = FastList.newListWith(1, 2, 3, 4);
Assert.assertEquals(list1, list2);

如果你想要一个int的可变列表,没有装箱,你可以使用以下内容:

MutableIntList primitiveList1 = new IntArrayList().with(1).with(2).with(3).with(4);
MutableIntList primitiveList2 = IntArrayList.newListWith(1, 2, 3, 4);
Assert.assertEquals(primitiveList1, primitiveList2);

注意:我是GS Collections的开发人员。

答案 5 :(得分:0)

这是一种方式。但我猜这个值并不总是1 ... 4。你仍然可以使用for循环。

for (int i = 1; i <= 4; i ++){
mylistAdd(i)  
}

答案 6 :(得分:0)

不幸的是,因为它返回布尔值,你可以使用构建器的样式来执行它,除非你扩展它。

看看guava(Google收藏)是否有适合您的内容。他们使用的建筑师风格可能适合您,也可能不适合您。像..

public static <E> List<E> asList(@Nullable 
             E first,
             E[] rest)

如果您想在Java中使用缩短版本,也可以使用groovy

def list = [5, 6, 7, 8]

但说实话,做一个for循环和添加是足够优雅的,还有更多的事情需要担心。

答案 7 :(得分:0)

方法是如上所述的Arrays.asList(T ...)。但这是另一种方法:

public class CollectionChain<T, C extends Collection<T>> {

    public static <T> CollectionChain<T, ArrayList<T>> newArrayList(T inital) {
        return start(new ArrayList<>(), inital);
    }

    public static <T, C extends Collection<T>> CollectionChain<T, C> start(C collection, T inital) {
        return new CollectionChain<>(collection).add(inital);
    }

    private final C collection;

    private CollectionChain(C collection) {
        this.collection = collection;
    }

    public CollectionChain<T, C> add(T value) {
        collection.add(value);
        return this;
    }

    public final CollectionChain<T, C> addAll(T... values) {
        return addAll(Arrays.asList(values));
    }

    public CollectionChain<T, C> addAll(Collection<T> values) {
        collection.addAll(values);
        return this;
    }

    // Add other chained actions

    public C get() {
        return collection;
    }
}

可以这样使用:

import static project.path.CollectionChain.*;

List<String> chainResult = newArrayList("Needed to properly resolve the type").add("A test").addAll("1", "2").get();

这样,将仅创建和填充一个列表。