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 method | Instance method (default) |
| พารามิเตอร์ | (List, oldVal, newVal) | (UnaryOperator<E>) |
| การทำงาน | แทนที่ค่าเก่า→ค่าใหม่ (equals) | Transform ทุก element (function) |
| Scope | เฉพาะ element ที่ match | ทุก element |
| คืนค่า | boolean | void |
| Java version | 1.2+ | 8+ |
เมื่อไหร่ใช้ตัวไหน?
Collections.replaceAll(list, "old", "new")- แทนที่ค่าเฉพาะเจาะจงlist.replaceAll(s -> s.trim())- ทำให้ทุก element ผ่านการแปลง