記事ディレクトリ
オブジェクトリスト内のプロパティのリストを取得します。
1. 使用例
リスト内のすべてのオブジェクトのプロパティを取得します
List<UserEntity> users = new ArrayList<>(); users.add(new UserEntity(1,"张三","18399990000")); List<String> courseIds = users.stream().map(UserEntity::getUserName).collect(Collectors.toList());
2. 具体的な事例
ユーザーエンティティ.java
import java.io.Serializable;
/**
* @author: shipleyleo
* @create: 2023-06-03 15:22:54
*/
public class UserEntity implements Serializable {
private Integer id;
private String userName;
private String phone;
public UserEntity(Integer id, String userName, String phone) {
this.id = id;
this.userName = userName;
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
テスト.java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: shipleyleo
* @create: 2023-06-03 15:51:03
*/
public class Test {
public static void main(String args[]){
List<UserEntity> users = new ArrayList<>();
users.add(new UserEntity(1,"张三","18399990000"));
users.add(new UserEntity(2,"王五","18399990023"));
users.add(new UserEntity(3,"里斯","18399990005"));
// 获取list中所有对象的某个属性
List<String> courseIds = users.stream().map(UserEntity::getUserName).collect(Collectors.toList());
System.out.println(courseIds); //[张三, 王五, 里斯]
}
}
出力結果:
付録: Java 8 Stream の基本的な使用法
1. Java 8 Stream の基本概要
Java 8 API には、stream Stream と呼ばれる新しい抽象化が追加されており、宣言的な方法でデータを処理できるようになります。
Stream は、SQL ステートメントを使用してデータベースからデータをクエリするのと同様の直感的な方法で、Java のコレクション操作と表現の高レベルの抽象化を提供します。
Stream API を使用すると、Java プログラマーの生産性が大幅に向上し、効率的でクリーンで簡潔なコードを作成できるようになります。
このスタイルは、要素のコレクションをストリームとして処理するものとみなし、パイプライン内で送信され、フィルタリング、並べ替え、集計などのパイプラインのノードで処理できます。
要素フローはパイプラインの中間操作で処理され、最後に最終操作で前の処理の結果が得られます。+--------------------+ +------+ +------+ +---+ +-------+ | stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect| +--------------------+ +------+ +------+ +---+ +-------+
上記のプロセスは次のように Java コードに変換されます。
List<Integer> transactionsIds = widgets.stream() .filter(b -> b.getColor() == RED) .sorted((x,y) -> x.getWeight() - y.getWeight()) .mapToInt(Widget::getWeight) .sum();
2. ストリームの生成
Java 8 では、コレクション インターフェイスにストリームを生成する 2 つのメソッドがあります。
- stream() -コレクションのシリアルストリームを作成します。
- ParallelStream() -コレクションの並列ストリームを作成します。
1、地図
各要素を対応する結果にマップするには、map メソッドが使用されます。次のコード スニペットは、map を使用して、要素に対応する平方数を出力します。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
2、フィルター
filter メソッドは、条件を設定して要素を除外するために使用されます。次のコード スニペットでは、filter メソッドを使用して空の文字列を除外します。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.stream().filter(string -> string.isEmpty()).count();
3、それぞれ
Stream には、ストリーム内の各項目を反復処理するための新しいメソッド 'forEach' が用意されています。次のコード スニペットは、forEach を使用して 10 個の乱数を出力します。
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
4、制限
limit メソッドは、指定された数のストリームを取得するために使用されます。次のコード スニペットでは、limit メソッドを使用して 10 個のデータを出力します。
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
5、並べ替え
ストリームをソートするには、sorted メソッドが使用されます。次のコード スニペットでは、sorted メソッドを使用して 10 個の乱数の出力を並べ替えます。
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);
6. 並列プログラム
ParallelStream は、ストリーム並列ハンドラーの代替です。次の例では、ParallelStream を使用して空の文字列の数を出力します。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
順次実行と並列実行を簡単に切り替えることができます。
7、コレクター
Collectors クラスは、ストリームのコレクションへの変換や要素の集約など、多くのリダクション操作を実装します。コレクターを使用してリストまたは文字列を返すことができます。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);
8. 統計
さらに、統計結果を生成するいくつかのコレクターも非常に役立ちます。これらは主に int、double、long などの基本的な型で使用され、次のような統計結果を生成するために使用できます。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
参考文献