日々の開発作業では、オブジェクトのコレクションからオブジェクト内の属性のコレクションを取得するなど、リスト内のデータを処理する問題に遭遇することがよくあります。以前は、各要素を走査し、それを取り出して別のコレクションに入れると考えていましたが、これはさらに面倒でしたが、Java 8 以降では、コレクションに対して Stream 操作を実行できるため、上記の処理がより簡潔になります。
Stream ストリーミング処理には、map() メソッドがあります。まずはその定義を見てみましょう。このメソッドは java.util.stream.Stream クラスにあります。
map() メソッドが関数インターフェイス パラメーターを受け取ることがわかります。入力パラメーターには T があり、ストリームを返します。このストリームは R ジェネリックです。主に次の点に注意してください:
入力パラメータはストリーム内の要素です;
出力パラメータはストリームです。ストリームが New 要素で、
# を図で表すと、元のストリームには 4 つの循環パターンがあり、map() 関数を呼び出すと、4 と 5- になります。ここで、円形パターンと五芒星パターンは、元のストリームに要素がいくつあるか、map() メソッドを呼び出した後にまだ要素がどれだけあるかという 1 対 1 の対応関係を持ちます。 、変わるのはストリーム内の要素タイプだけです。
最初にエンティティ クラス 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); }
学生の名前をリストに入れます
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); } }
##上記の結果から、Tang Lin の中国語スコアが実際に
90 に変更されたことがわかります。これは正しいです。元のデータを見ると、90
にも変更されています。前述したように、map() メソッドは新しいストリームを生成し、次の行があるため、元のストリーム内のデータも変更されています。参照型のデータは要素内の要素に基づいて変更され、その結果、元のストリームのデータも変更されます。
以上がJava8 StreamAPIでmap()メソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。