如何动态地将谓词添加到列表中

Hab*_*yad 2 java predicate list java-8

有没有办法在Java中动态地将Predicate添加到List中?为了简单说明,我这样做了:

List<Predicate<String>> filters = Arrays.asList(
    t -> !Utilities.isNumeric(t)
);
filters.add(t -> !t.isEmpty());
Run Code Online (Sandbox Code Playgroud)

但是filters.add在UnsupportedOperationException中执行结果.像这样的固定列表很好.

List<Predicate<String>> filters = Arrays.asList(
    t -> !Utilities.isNumeric(t),
    t -> !t.isEmpty()
);
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 7

解:

List<Predicate<String>> filters = new ArrayList<>(Arrays.asList(
    t -> !Utilities.isNumeric(t)
));
Run Code Online (Sandbox Code Playgroud)

说明:

Arrays.asList返回数组参数的固定长度列表1包装器.因为它是固定大小的,所以会改变大小的方法UnsupportedOperationException.

通过将其提供给ArrayList构造函数,您可以创建一个新列表,其大小可以更改.


1 - ....但列表不是不可变的.可以通过更新后备阵列或使用该List::set(int, T)方法来修改它.