How can I initialize a collection and add data on the same line?
在C中,我可以创建某种类型的集合,并用同一行上的数据初始化它。
var foo = new List {"one","two","three"};
在Java中有类似的方法吗?
- 下载评论
- Likely because there are many diplicates of this question that are easily searchable.
- 我一直在找为了一些原因,什么都没有发生。我会把它拉回去
- Stackoverflow.com/questions/13395114/…
如果需要只读的List。
1 2 3 4
| List <String > numbers = Arrays. asList("one", "two", "three");
// Can't add since the list is immutable
numbers. add("four"); // java.lang.UnsupportedOperationException |
如果您想稍后修改List。
1 2 3 4 5
| List <String > numbers2 = new ArrayList <String >(
Arrays. asList("one", "two", "three"));
numbers2. add("four");
System. out. println(numbers2 ); // [one, two, three, four] |
- 值得注意的是,Arrays.asList产生了一个可变的列表。文档表明结果列表的大小是固定的,但numbers.set(0,"one")将绝对修改列表和基础数组。
- 对于界面驱动的人………这也会起作用:collectioninlineCollection=arrays.asList(myObjectInstancedOne,myObjectInstancedTwo,myObjectInstancedThree);感谢您的回答ravi!
您可以使用Arrays.asList(T... a)。
1
| List <String > foo = Arrays. asList("one", "two", "three"); |
正如Boris在评论中提到的,结果List是不可变的(即只读)。您需要将其转换为ArrayList或类似文件,以便修改集合:
1
| List <String > foo = new ArrayList <String >(Arrays. asList("one", "two", "three")); |
还可以使用匿名子类和初始值设定项创建List:
1 2 3 4 5 6 7
| List<String> foo = new ArrayList<String>() {
{
add("one");
add("two");
add("three");
}
}; |
我更喜欢使用guava(以前叫google collections)库来完成这项工作,它既消除了再次写下类型的需要,又有各种直接添加数据的方法。
示例:List yourList = Lists.newArrayList();
或添加数据:List yourList = Lists.newArrayList(yourClass1, yourclass2);。
这同样适用于所有其他类型的集合及其各种实现。另一个例子:Set treeSet = Sets.newTreeSet();。
你可以在https://code.google.com/p/guava-libraries上找到它。/
我能想到的最好的办法是:
1 2 3 4 5
| final List<String> foo = new ArrayList<String>() {{
add("one");
add("two");
add("three");
}}; |
基本上,这表示您正在创建ArrayList类的匿名子类,然后使用"one","two","three"静态初始化该子类。
- 这个问题是针对Java的。
- 没有理由创建匿名类来避免几行代码。
- 抱歉,我最近做了太多的javascript。
- EDCOX1·0是Java中的接口
- 是的,我想匿名实现还需要您实现所有其他List方法。最好匿名扩展具体的实现。
1
| List <String > numbers = Arrays. asList("one", "two", "three"); |
正如鲍里斯所说,它使你的numbers不变。
是的,你可以,但是有两行。
1 2
| List <String > numbers = new ArrayList <String >();
Collections. addAll(numbers, "one", "two", "three"); |
如果你仍然只想在同一条线上,和Gauva一起
1
| List<String> numbers= Lists.newArrayList("one","two","three"); |
1
| List <String > list = Arrays. asList("one", "two", "three") |
- 这使得结果List不可变。
- 好的,那么new ArrayList(Arrays.asList("one","two","three"))。
- 现在,您已经为数组创建了一个列表、一个数组以及列表包装器,而所需的只是一个数组…
- 你的解决方案?
- 创建一个静态工厂方法,或者,如果您使用的是guava,那么这里有很多方法。
- 这不是简单的Java"内联"解决方案。一般来说我也用番石榴。