我在下面的代码段中添加了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上
答案 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();
这样,将仅创建和填充一个列表。