Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Collections.replaceAll() และ List.replaceAll() ใน Java

Java มีเมธอด replaceAll() 2 แบบ ที่ทำงานต่างกัน:

1. Collections.replaceAll(List, oldVal, newVal)

Static method ของ Collections class แทนที่ element ที่เท่ากับ oldVal (ใช้ equals()) ด้วย newVal

ตัวอย่าง

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ReplaceAllExample {
    public static void main(String args[]) {
        List<String> list = new ArrayList<>();
        list.add("Java");
        list.add("Java Script");
        list.add("HBase");
        list.add("CoffeeScript");
        list.add("TypeScript");
        
        System.out.println("Contents of list: " + list);
        
        Collections.replaceAll(list, "Java", "JAVA");
        
        System.out.print("Contents of list after replace operation:\n" + list);
    }
}

ผลลัพธ์

Contents of list: [Java, Java Script, HBase, CoffeeScript, TypeScript]
Contents of list after replace operation: [JAVA, Java Script, HBase, CoffeeScript, TypeScript]

อธิบาย

  • แทนที่เฉพาะ element ที่ equals("Java") → เฉพาะ "Java" ตัวแรก
  • "Java Script" ไม่เท่ากับ "Java" → ไม่ถูกแทนที่
  • คืนค่า boolean (true ถ้ามีการแทนที่)

2. List.replaceAll(UnaryOperator<E>)

Instance method ของ List interface (Java 8+) นำ UnaryOperator ไปใช้กับ ทุก element แล้วแทนที่ด้วยผลลัพธ์

ตัวอย่าง

import java.util.ArrayList;
import java.util.function.UnaryOperator;

class Op implements UnaryOperator<String> {
    public String apply(String str) {
        return str.toUpperCase();
    }
}

public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("JavaScript");
        list.add("CoffeeScript");
        list.add("HBase");
        list.add("OpenNLP");
        
        System.out.println("Contents of the list: " + list);
        
        list.replaceAll(new Op());
        
        System.out.println("Contents of the list after replace operation:\n" + list);
    }
}

ผลลัพธ์

Contents of the list: [Java, JavaScript, CoffeeScript, HBase, OpenNLP]
Contents of the list after replace operation: [JAVA, JAVASCRIPT, COFFEESCRIPT, HBASE, OPENNLP]

ใช้ Lambda (Java 8+)


list.replaceAll(s -> s.toUpperCase());
// หรือ
list.replaceAll(String::toUpperCase);

สรุปความแตกต่าง

คุณสมบัติCollections.replaceAll()List.replaceAll()
ประเภทStatic methodInstance method (default)
พารามิเตอร์(List, oldVal, newVal)(UnaryOperator<E>)
การทำงานแทนที่ค่าเก่า→ค่าใหม่ (equals)Transform ทุก element (function)
Scopeเฉพาะ element ที่ matchทุก element
คืนค่าbooleanvoid
Java version1.2+8+

เมื่อไหร่ใช้ตัวไหน?

  • Collections.replaceAll(list, "old", "new") - แทนที่ค่าเฉพาะเจาะจง
  • list.replaceAll(s -> s.trim()) - ทำให้ทุก element ผ่านการแปลง