ホームページ > Java > &#&チュートリアル > Java8 StreamAPIでmap()メソッドを使用する方法

Java8 StreamAPIでmap()メソッドを使用する方法

王林
リリース: 2023-05-13 19:16:04
転載
1505 人が閲覧しました

はじめに

日々の開発作業では、オブジェクトのコレクションからオブジェクト内の属性のコレクションを取得するなど、リスト内のデータを処理する問題に遭遇することがよくあります。以前は、各要素を走査し、それを取り出して別のコレクションに入れると考えていましたが、これはさらに面倒でしたが、Java 8 以降では、コレクションに対して Stream 操作を実行できるため、上記の処理がより簡潔になります。

概要

Stream ストリーミング処理には、map() メソッドがあります。まずはその定義を見てみましょう。このメソッドは java.util.stream.Stream クラスにあります。

Java8 StreamAPIでmap()メソッドを使用する方法

map() メソッドが関数インターフェイス パラメーターを受け取ることがわかります。入力パラメーターには T があり、ストリームを返します。このストリームは R ジェネリックです。主に次の点に注意してください:

  • 入力パラメータはストリーム内の要素です;

  • 出力パラメータはストリームです。ストリームが New 要素で、

# を図で表すと、元のストリームには 4 つの循環パターンがあり、map() 関数を呼び出すと、4 と 5- になります。ここで、円形パターンと五芒星パターンは、元のストリームに要素がいくつあるか、map() メソッドを呼び出した後にまだ要素がどれだけあるかという 1 対 1 の対応関係を持ちます。 、変わるのはストリーム内の要素タイプだけです。

Java8 StreamAPIでmap()メソッドを使用する方法

最初にエンティティ クラス Student.java

@Data
public class Student implements Serializable {
    /**
     * 姓名
     */
    private String name;
    /**
     * 班级
     */
    private String schoolClass;
    /**
     *语文成绩
     */
    private Integer chineseScore;
    /**
     * 数学成绩
     */
    private Integer mathScore;
}
ログイン後にコピー

を作成し、次にデータを初期化するクラスを作成します。

public class DataFactory {
    public static List<Student> initData(){
        List<Student> list= new ArrayList<>();
        Student s1=new Student();
        s1.setName("汤霖");
        s1.setSchoolClass("小一班");
        s1.setChineseScore(87);
        s1.setMathScore(95);
        list.add(s1);
 
        Student s2=new Student();
        s2.setName("李牧唐");
        s2.setSchoolClass("小二班");
        s2.setChineseScore(98);
        s2.setMathScore(97);
        list.add(s2);
 
        Student s3=new Student();
        s3.setName("顾北辰");
        s3.setSchoolClass("二年级");
        s3.setChineseScore(89);
        s3.setMathScore(94);
        list.add(s3);
 
        Student s4=new Student();
        s4.setName("言言");
        s4.setSchoolClass("小二班");
        s4.setChineseScore(100);
        s4.setMathScore(90);
        list.add(s4);
 
        Student s5=new Student();
        s5.setName("大运");
        s5.setSchoolClass("小三班");
        s5.setChineseScore(96);
        s5.setMathScore(100);
        list.add(s5);
        return list;
    }
}
ログイン後にコピー

すべての学生の名前を検索します

public static void main(String[] args) {
    DataFactory.initData().stream()
        .map(student -> student.getName())
        .forEach(System.out::println);
}
ログイン後にコピー

ここでは、map() メソッドが使用されています。入力パラメータは Student、出力パラメータはジェネリック型として String を持つストリームです。印刷後、結果

Java8 StreamAPIでmap()メソッドを使用する方法

を見ると、すべての生徒の名前が印刷されたことがわかります。これらの生徒の名前をリストに入れたい場合はどうすればよいでしょうか?

学生の名前をリストに入れます

public static void main(String[] args) {
    //将所有的学生姓名放到list中
    List<String> studentNames = DataFactory.initData().stream()
        .map(student -> student.getName())
        .collect(Collectors.toList());
    for (String studentName : studentNames) {
        System.out.println(studentName);
    }
}
ログイン後にコピー

同様に、すべてのクラスを検索し、すべての学生の得点を調べます。上記と比較することができ、次のことができます。プリントを参照 生徒名またはクラスに重複したデータがあります。この問題を解決するにはどうすればよいですか?データが最後にリストに入れられることがわかりました。重複の問題を解決するには、データをセットに入れ、セットの重複排除機能を使用します。

//将学生姓名放到Set中,可以实现去重功能
Set<String> studentNames = DataFactory.initData().stream()
    .map(student -> student.getName())
    .collect(Collectors.toSet());
ログイン後にコピー

結果はノーになります。興味があれば、自分で試してみてください。

「Tang Lin」という名前の学生の中国語スコアを 90 に設定します

次に、Tang Lin という名前の学生の中国語スコアを 90 に設定する必要があります

90、map() 関数の使い方を見てみましょう。

public static void main(String[] args) {
    List<Student> students = DataFactory.initData();

    List<Student> studentNames = students.stream().map(student -> {
        if ("汤霖".equals(student.getName())) {
            student.setChineseScore(90);
        }
        return student;
    }).collect(Collectors.toList());

    for (Student studentName : studentNames) {
        System.out.println(studentName);
    }
    //打印老的list
    System.out.println("-----改之前的数据-----");
    for (Student studentName : students) {
        System.out.println(studentName);
    }
}
ログイン後にコピー
出力結果:

Java8 StreamAPIでmap()メソッドを使用する方法##上記の結果から、Tang Lin の中国語スコアが実際に

90

に変更されたことがわかります。これは正しいです。元のデータを見ると、90 にも変更されています。前述したように、map() メソッドは新しいストリームを生成し、次の行があるため、元のストリーム内のデータも変更されています。参照型のデータは要素内の要素に基づいて変更され、その結果、元のストリームのデータも変更されます。

以上がJava8 StreamAPIでmap()メソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート