Java 9で追加されたCollectors.filtering()メソッドとは?使い方とgroupingBy()との違いを解説
Collectorsクラスは、JavaのStream APIにおいて欠かせない重要なクラスの一つです。Java 9では、このCollectorsクラスに新しいメソッドfiltering()が追加されました。このメソッドを使うと、ストリーム内の要素を柔軟にフィルタリングできます。
filtering()メソッドとfilter()メソッドの違い
一見すると、filtering()はストリームのfilter()メソッドと似た動作をするように思えます。しかし、両者には決定的な違いがあります。
- filter()メソッド:要素がグループ化される前に値を処理します。
- filtering()メソッド:Collectors.groupingBy()メソッドと組み合わせることで、グループ化を先に行い、その後にフィルタリングを行えます。
つまり、グループごとの空リストを保持したい場合や、グループ化の結果に対して条件付きの絞り込みを行いたい場合には、filtering()メソッドが非常に有効です。
構文
public static <T, A, R> Collector<T, ?, R> filtering(Predicate<? super T> predicate,
Collector<? super T, A, R> downstream)第一引数にはフィルタリング条件となるPredicateを、第二引数にはダウンストリームのCollectorを指定します。
使用例
以下のコードでは、文字列のリストを長さごとにグループ化し、さらに「z」を含まない文字列だけを抽出しています。
import java.util.stream.*;
import java.util.*;
public class FilteringMethodTest {
public static void main(String args[]) {
List<String> list = List.of("x", "yy", "zz", "www");
Map<Integer, List<String>> result = list.stream()
.collect(Collectors.groupingBy(String::length,
Collectors.filtering(s -> !s.contains("z"),
Collectors.toList())));
System.out.println(result);
}
}実行結果
{1=[x], 2=[yy], 3=[www]}この例では、まず文字列の長さ(1、2、3)をキーとしてグループ化が行われ、その後、各グループ内で「z」を含む要素("zz")が除外されています。もし通常のfilter()メソッドを使った場合、「zz」が除外された時点でキー「2」のグループ自体が存在しなくなります。しかし、filtering()を使えば、{2=[]}のように空のリストを持つグループも保持できるため、より意図に沿ったデータ処理が可能になります。
-
JavaScriptの_.without()メソッドとは?配列から指定した値を除外する方法
JavaScriptで配列を操作する際、特定の値だけを取り除いた新しい配列を作りたいケースはよくあります。そんなときに便利なのが、Underscore.jsなどのユーティリティライブラリが提供する_.without()メソッドです。_.without()メソッドの概要_.without()は、第1引数に渡された配列から、第2引数以降で指定した要素をすべて除外し、その結果を新しい配列として返します。このメソッドには以下のような特徴があります。2つのパラメータを受け取る:第1パラメータが対象の配列、第2パラメータが取り除きたい値です。trueやfalseを問わず処理する:値の真偽を判断せず、各要素
-
Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説
destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc