JavaのList.replaceAll()メソッドの使い方を解説!UnaryOperatorでリスト要素を一括置換する方法
JavaのListインターフェースが提供するreplaceAll()メソッドは、UnaryOperator型のオブジェクトを受け取り、現在のリスト内のすべての要素に対して指定された処理を実行し、その結果で既存の値を置き換えるメソッドです。
replaceAll()メソッドの基本構文
void replaceAll(UnaryOperator<E> operator)
UnaryOperatorは、同じ型の引数を1つ受け取り、同じ型の結果を返す関数型インターフェースです。つまり、リストの各要素に対して「入力と出力が同型」の変換処理を適用するのに適しています。
実装例
以下の例では、UnaryOperatorを実装したクラスを作成し、リスト内のすべての文字列を大文字に変換しています。
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("置換前のリスト内容: " + list);
// すべての要素に変換処理を適用
list.replaceAll(new Op());
System.out.println("置換後のリスト内容: \n" + list);
}
}
実行結果
置換前のリスト内容: [Java, JavaScript, CoffeeScript, HBase, OpenNLP] 置換後のリスト内容: [JAVA, JAVASCRIPT, COFFEESCRIPT, HBASE, OPENNLP]
ラムダ式を使ったより簡潔な書き方
UnaryOperatorは関数型インターフェースなので、Java 8以降ではラムダ式を使って、わざわざ別クラスを定義せずに同じ処理を簡潔に記述できます。
list.replaceAll(str -> str.toUpperCase());
このように1行で書けるため、実際の開発ではラムダ式やメソッド参照(list.replaceAll(String::toUpperCase);)を使うのが一般的です。
まとめ
replaceAll()はリストの全要素に対して一括で変換処理を適用し、元のリストを直接更新するメソッド。- 引数には
UnaryOperator(入力と出力が同型の関数)を渡す。 - ラムダ式やメソッド参照と組み合わせると、コードを大幅に簡潔化できる。
-
Java 8におけるインターフェースの機能強化 〜デフォルトメソッドと静的メソッド〜
Java 8で導入されたインターフェースの新機能Java 8では、インターフェースに「デフォルトメソッド(default method)」という新しい概念が導入されました。この機能は後方互換性(下位互換性)を維持するために追加されたもので、既存のインターフェースを壊すことなく、Java 8の強力なラムダ式の恩恵を受けられるようにすることを目的としています。なぜデフォルトメソッドが必要だったのか例えば、従来のListやCollectionインターフェースにはforEachメソッドの宣言が存在しませんでした。ここで単純にforEachメソッドをインターフェースへ追加すると、これらのインターフェース
-
JavaでList(リスト)を配列に変換する方法|toArray()とArrays.asList()の使い方
Javaの開発において、List(リスト)と配列(Array)の相互変換は非常によく使われる基本的な操作です。 Listを配列に変換する最も簡単かつ推奨される方法は、.toArray()メソッドを使うことです。逆に、配列をListに戻したい場合は、Arrays.asList()メソッドを使用します。 以下では、文字列(String)のListや整数(Integer)のListを、それぞれ対応する配列に変換する具体例を紹介します。 String型のListを配列に変換する import java.util.ArrayList; import java.util.List; public cl