言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. ストリーム.sorted() / distinct() / limit() / skip()

ストリーム.sorted() / distinct() / limit() / skip()

対応: Java 8(2014)

ストリームの中間操作として、要素の並べ替えに『sorted()』、重複除去に『distinct()』、件数を制限するために『limit()』、先頭をスキップする『skip()』を使用します(Java 8+)。これらはメソッドチェーンで組み合わせて使えます。

構文

// 自然順序(昇順)で並べ替えます
ストリーム.sorted();

// コンパレーターを使って並べ替えます
ストリーム.sorted(Comparator.reverseOrder());

// 重複する要素を除去します
ストリーム.distinct();

// 先頭から指定件数だけ取得します
ストリーム.limit(件数);

// 先頭から指定件数をスキップします
ストリーム.skip(件数);

// 各要素を確認しながら通過させます(デバッグ用)
ストリーム.peek(要素 -> 処理);

メソッド一覧

メソッド概要
sorted()要素を自然順序(昇順)で並べ替える中間操作です。要素は Comparable を実装している必要があります。
sorted(Comparator)指定したコンパレーターで並べ替える中間操作です。
distinct()重複する要素を除去する中間操作です。equals()hashCode() を使って判定します。
limit(long maxSize)先頭から指定した件数の要素だけを残す中間操作です。
skip(long n)先頭から指定した件数の要素をスキップする中間操作です。
peek(Consumer)要素を通過させながら処理を実行する中間操作です。主にデバッグ用途で使用します。

サンプルコード

sample_StreamSortedDistinct.java
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

class StreamSortedDistinct {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2, 3, 5, 1);

        // 昇順で並べ替えます
        numbers.stream()
            .sorted()
            .forEach(System.out::println); // 『1』『1』『2』『3』『3』『4』『5』『5』と出力されます。

        // 降順で並べ替えます
        numbers.stream()
            .sorted(Comparator.reverseOrder())
            .forEach(System.out::println); // 降順で出力されます。

        // 重複を除去します
        numbers.stream()
            .distinct()
            .forEach(System.out::println); // 『5』『3』『1』『4』『2』と出力されます(重複除去後)。

        // 先頭から3件だけ取得します
        numbers.stream()
            .sorted()
            .limit(3)
            .forEach(System.out::println); // 『1』『1』『2』と出力されます。

        // 先頭の3件をスキップします
        numbers.stream()
            .sorted()
            .skip(3)
            .forEach(System.out::println); // 4件目以降が出力されます。

        // 文字列を長さで並べ替えます
        List<String> fighters = Arrays.asList("Goenitz", "Terry Bogard", "Iori Yagami", "Kusanagi Kyo");
        fighters.stream()
            .sorted(Comparator.comparingInt(String::length))
            .forEach(System.out::println); // 『Goenitz』『Iori Yagami』『Terry Bogard』『Kusanagi Kyo』と出力されます。
    }
}
StreamSortedDistinct.java
javac StreamSortedDistinct.java
java StreamSortedDistinct
1
1
2
3
3
4
5
5
5
5
4
3
3
2
1
1
5
3
1
4
2
1
1
2
3
3
4
5
5
Goenitz
Iori Yagami
Terry Bogard
Kusanagi Kyo

概要

『sorted()』は中間操作のため元のコレクションを変更しません。並べ替えには要素が Comparable を実装している必要があります(StringInteger などは実装済みです)。独自クラスを並べ替えるには Comparator を指定してください。

『limit()』と『skip()』を組み合わせるとページネーション処理が実装できます(例: skip(20).limit(10) で21〜30件目を取得)。『sorted()』は全要素をソートするため、大量データに対して使用する場合はパフォーマンスに注意してください。

ストリームの生成・絞り込みについては『stream() / filter() / map()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。