使用某些预定义值初始化ArrayList

Paw*_*wan 60 java

我有一个示例程序,如图所示.

我希望我ArrayList symbolsPresent用一些预定义的符号初始化:ONE,TWO,THREE和FOUR.

symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
Run Code Online (Sandbox Code Playgroud)

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);

    }    
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

sam*_*mba 142

试试这个

new String[] {"One","Two","Three","Four"};
Run Code Online (Sandbox Code Playgroud)

要么

List<String> places = Arrays.asList("One", "Two", "Three");
Run Code Online (Sandbox Code Playgroud)

阵列

  • @CarlosHenriqueRodriguez asList(...)返回List <E>而不是ArrayList <E> (4认同)
  • 好的解决方案,asList(...)返回新的ArrayList <>(a),就像问题的作者请求一样 (2认同)
  • `Arrays.asList(T...)` 返回的列表的大小上限为构造函数中提供的数组的大小。这可能是也可能不是问题,具体取决于使用情况。 (2认同)

Rei*_*eus 54

双括号初始化是一个选项:

List<String> symbolsPresent = new ArrayList<String>() {{
   add("ONE");
   add("TWO");
   add("THREE");
   add("FOUR");
}};
Run Code Online (Sandbox Code Playgroud)

需要注意的是String一般类型的参数通过所指示的所分配的表达必要JLS§15.9

如果类实例创建表达式使用类的"<>"形式为类的类型参数声明一个匿名类,那么这是一个编译时错误.


Per*_*ror 17

如何使用重载的ArrayList构造函数.

 private ArrayList<String> symbolsPresent = new ArrayList<String>(Arrays.asList(new String[] {"One","Two","Three","Four"}));
Run Code Online (Sandbox Code Playgroud)

  • 会不会单独使用Arrays.asList()来做这项工作? (4认同)
  • @CarlosHenriqueRodriguez会,但是你必须在左侧有List <String>.:) (3认同)
  • 如果我没记错的话,如果你使用 Arrays.asList() 并直接使用返回的 List,它将是固定大小的。基本上它仍然表现得像一个数组,只是包装在 List 接口中。 (2认同)

Dil*_*nga 11

您还可以使用varargs语法使代码更清晰:

使用重载的构造函数:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)

或者有一个静态工厂方法(我的首选方法):

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");
Run Code Online (Sandbox Code Playgroud)


Kri*_*hes 10

import com.google.common.collect.Lists;

...


ArrayList<String> getSymbolsPresent = Lists.newArrayList("item 1", "item 2");

...
Run Code Online (Sandbox Code Playgroud)


Geo*_*lou 7

您可以使用Java 8 Stream API.
您可以创建对象流并将其作为列表收集.

private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


Nar*_*iya 7

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");
}};
Run Code Online (Sandbox Code Playgroud)