文
章
目
录
章
目
录
在 Java 中,ArrayList.replaceAll()
方法仅保留此列表中存在于指定方法参数集合中的元素。其余所有元素都从列表中移除。这个方法恰好与 removeAll() 方法相反。
1.ArrayList.replaceAll() API
replaceAll()
方法接受一个类型为 UnaryOperator
的单个参数。UnaryOperator
接口是一个具有名为 apply()
的单个抽象方法的函数接口,该方法返回与操作数相同类型的结果。我们通常在 lambda 表达式中看到 UnaryOperator
以形如 ‘x-> 对 x 进行某些操作’ 的方式工作。
public void replaceAll(UnaryOperator<E> operator);
- 方法参数:
UnaryOperator
表达式。 - 方法返回:
void
。 - 方法可能抛出:如果在
replaceAll()
未完成时修改了列表,则可能抛出ConcurrentModificationException
。
2.ArrayList.replaceAll() 示例
下面的 Java 程序使用 replaceAll()
方法使用 lambda 表达式将所有列表项更改为小写。
2.1. 使用内联表达式
我们可以在只需执行单个语句的情况下使用内联 lambda 表达式。
ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(alphabets); //[A, B, C, D, E]
alphabets.replaceAll( e -> e.toLowerCase() );
System.out.println(alphabets); //[a, b, c, d, e]
2.2. 自定义 UnaryOperator 的实现
创建一个实现 UnaryOperator
的新类,以在数组列表的每个元素上执行更复杂的逻辑。
class MyOperator implements UnaryOperator<String> {
@Override
public String apply(String t) {
//自定义代码逻辑
return t.toLowerCase();
}
}
现在,我们可以如下使用 MyOperator
:
ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(alphabets); //[A, B, C, D, E]
alphabets.replaceAll( new MyOperator() );
System.out.println(alphabets); //[a, b, c, d, e]
这就是 Java 中的 ArrayList.replaceAll()
方法的全部内容。