我有一个示例程序,如图所示。
我希望我的ArrayList
symbolsPresent
能够使用一些预定义的符号进行初始化:一,二,三和四。
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
import java.util.ArrayList;
public class Test {
private ArrayList<String> symbolsPresent = new ArrayList<String>();
public ArrayList<String> getSymbolsPresent() {
return symbolsPresent;
}
public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
this.symbolsPresent = symbolsPresent;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println("Symbols Present is" + t.symbolsPresent);
}
}
这可能吗?
答案 0 :(得分:130)
试试这个
new String[] {"One","Two","Three","Four"};
或
List<String> places = Arrays.asList("One", "Two", "Three");
答案 1 :(得分:52)
双支撑初始化是一个选项:
List<String> symbolsPresent = new ArrayList<String>() {{
add("ONE");
add("TWO");
add("THREE");
add("FOUR");
}};
请注意,JLS §15.9
指示的已分配表达式中String
泛型类型参数是
如果类实例创建表达式使用“&lt;&gt;”声明匿名类,则是编译时错误类的类型参数的形式。
答案 2 :(得分:17)
如何使用overloaded ArrayList constructor。
private ArrayList<String> symbolsPresent = new ArrayList<String>(Arrays.asList(new String[] {"One","Two","Three","Four"}));
答案 3 :(得分:11)
您还可以使用varargs语法使代码更清晰:
使用重载的构造函数:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));
utils模块中的子类ArrayList:
public class MyArrayList<T> extends ArrayList<T> {
public MyArrayList(T... values) {
super(Arrays.asList(values));
}
}
ArrayList<String> list = new MyArrayList<String>("a", "b", "c");
或者有一个静态工厂方法(我的首选方法):
public class Utils {
public static <T> ArrayList<T> asArrayList(T... values) {
return new ArrayList<T>(Arrays.asList(values));
}
}
ArrayList<String> list = Utils.asArrayList("a", "b", "c");
答案 4 :(得分:9)
import com.google.common.collect.Lists;
...
ArrayList<String> getSymbolsPresent = Lists.newArrayList("item 1", "item 2");
...
答案 5 :(得分:6)
您可以使用 Java 8 Stream API 您可以创建对象流并将其作为列表收集。
private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
.collect(Collectors.toList());
答案 6 :(得分:6)
public static final List<String> permissions = new ArrayList<String>() {{
add("public_profile");
add("email");
add("user_birthday");
add("user_about_me");
add("user_location");
add("user_likes");
add("user_posts");
}};
答案 7 :(得分:4)
Java 9允许您使用List.of
工厂创建一个包含单行代码的不可修改列表:
public class Main {
public static void main(String[] args) {
List<String> examples = List.of("one", "two", "three");
System.out.println(examples);
}
}
输出:
[one, two, three]
答案 8 :(得分:3)
Personnaly我喜欢在构造函数
中进行所有初始化public Test()
{
symbolsPresent = new ArrayList<String>();
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
}
编辑:这是一个选择当然,其他人更喜欢在声明中初始化。两者都有效,我选择了构造函数,因为那里有所有类型的初始化(如果你需要一个循环或参数,...)。但是,我在源代码顶部的声明中初始化常量 最重要的是遵循您喜欢的规则并在我们的课程中保持一致。
答案 9 :(得分:2)
另外,如果要强制List为只读(如果修改则抛出UnsupportedOperationException):
List<String> places = Collections.unmodifiableList(Arrays.asList("One", "Two", "Three"));
答案 10 :(得分:2)
我建议使用Arrays.asList()进行单行初始化。对于声明和初始化List的不同方式,您还可以参考Initialization of ArrayList in Java
答案 11 :(得分:1)
我使用从ArrayList继承的泛型类,并使用带有可变数字或参数的参数实现构造函数:
public class MyArrayList<T> extends ArrayList<T> {
public MyArrayList(T...items){
for (T item : items) {
this.add(item);
}
}
}
示例:
MyArrayList<String>myArrayList=new MyArrayList<String>("s1","s2","s2");
答案 12 :(得分:0)
如果您只想在任何方法之外进行初始化,请使用初始化程序块:
import java.util.ArrayList;
public class Test {
private ArrayList<String> symbolsPresent = new ArrayList<String>();
// All you need is this block.
{
symbolsPresent = new ArrayList<String>();
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
}
public ArrayList<String> getSymbolsPresent() {
return symbolsPresent;
}
public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
this.symbolsPresent = symbolsPresent;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println("Symbols Present is" + t.symbolsPresent);
}
}