ArrayList replaceAll() 方法
replaceAll() 方法采用 UnaryOperator 类型的单个参数。
UnaryOperator 接口是一个函数式接口,它有一个名为 apply 的抽象方法,该方法返回与操作数具有相同对象类型的结果。
我们已经看到 UnaryOperator在通常的 lambda 表达式中使用 'x-> do something with x'形式的单个参数。
public void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final int expectedModCount = modCount;
final int size = this.size;
for (int i=0; modCount == expectedModCount && i < size; i++) {
elementData[i] = operator.apply((E) elementData[i]);
}
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
modCount++;
}
方法参数 UnaryOperator 表达式。
方法返回 void。
如果列表被修改而 replaceAll()方法未完成,则方法抛出 ConcurrentModificationException。
https://onitroad.com 更多教程
ArrayList replaceAll()方法 示例
Java 程序使用 replaceAll()方法使用 lambda 表达式转换数组列表的所有元素。
内联 lambda 表达式
如果我们只需要执行单个语句,我们可以使用内联 lambda 表达式。
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListExample
{
public static void main(String[] args) throws CloneNotSupportedException
{
ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(alphabets);
alphabets.replaceAll( e -> e.toLowerCase() );
System.out.println(alphabets);
}
}
程序输出。
[A, B, C, D, E] [a, b, c, d, e]
自定义 UnaryOperator 实现
创建一个实现 UnaryOperator的新类,以在 arraylist 的每个元素上执行更复杂的逻辑。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.UnaryOperator;
public class ArrayListExample
{
public static void main(String[] args) throws CloneNotSupportedException
{
ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(alphabets);
alphabets.replaceAll( new MyOperator() );
System.out.println(alphabets);
}
}
class MyOperator implements UnaryOperator<String>
{
@Override
public String apply(String t) {
return t.toLowerCase();
}
}
程序输出。
[A, B, C, D, E] [a, b, c, d, e]
ArrayList replaceAll() 方法使用参数指定的结果替换arraylist的每个元素。
日期:2020-09-17 00:09:56 来源:oir作者:oir
