フローとは何ですか?
JDK8は、新しい概念を提供します。ストリームストリームは、「何もしない」という原則に従います。ストリームの例では、実行する必要があることを説明します。長い単語を取得してカウントします。
表面的には、ストリームはコレクションと非常によく似ており、どちらもデータの変換と取得を可能にします。ただし、それらの間には大きな違いがあります。
1.ストリームはその要素を保存しません。
2.ストリームの操作はデータソースを変更しません。たとえば、filterメソッドは元の要素を変更しませんが、新しいストリームを生成し
ます。3。ストリームの操作は可能な限り遅延して実行されます。つまり、結果が必要になるまで、操作が実行されます
フローを操作する一般的なプロセス:
1。フローを作成します
。2。初期フローを他のフローに変換する中間操作を指定します
。これには複数のステップが含まれる場合があります。3。操作を終了して結果を生成します。それ以降、このストリームは使用できなくなります
以下は、Streamで一般的に使用されるAPIの概要です。
1.フィルター(フィルター、述語関数インターフェースの受信、述語を満たすすべての要素の生成、組み込みの消費者消費者インターフェース)
基本フォーマット:Stream<T> filter(Predicate<? super T> predicate)
/**
*测试Stream<T> filter(Predicate<? super T> predicate)过滤
*在集合中找出姓张的人
* @author 16003
*
*/
public class Stream_filter {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
List<String> list2 = new ArrayList<>();
Collections.addAll(list, "张三丰","张无忌","姜子牙","张飞","奥特曼");
//方法一,用Lamda表达式的函数式接口
list2 = fun(list, str->{
return str.startsWith("张");
});
System.out.println(list2);
//方法二,用Stream流的filter方法过滤
Stream<String> stream3 = list.stream().filter(str->{return str.startsWith("张");});
stream3.forEach(str->System.out.println(str));
}
//方法一,用lamda表达式的函数式接口
public static List<String> fun(List<String> list,Predicate<String>cate){
List<String> list1 = new ArrayList<>();
for(String str:list) {
if(cate.test(str)==true) {
list1.add(str);
}
}
return list1;
}
}
2.
基本フォーマットを制限(切り捨て、最初のN要素を切り捨て、新しいストリームを返す):Stream<T> limit(long maxSize)
/**
* 测试Stream中limit方法 取前几个元素
* @author 16003
*
*/
public class Stream_limit {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "红鲤鱼","绿鲤鱼","黄鲤鱼","驴");
Stream<String> stream = list.stream().limit(3);
stream.forEach(str->System.out.println(str));
}
}
3.マップの
基本形式(マッピング、要素のマッピング、マッピング後に新しいストリームを返す、組み込みのFunction <T、R>インターフェイス):<R> Stream<R> map(Function<? super T,? extends R> mapper)
/**
* 测试Stream中的map<Function<T t> mapper>方法
* @author 16003
*
*/
public class Stream_map {
public static void main(String[] args) {
//将字符串转换成Integer
Stream<String> stream = Stream.of("1","2","3","4");
Stream<Integer> stream1 = stream.map((String str)->{
return Integer.parseInt(str);
});
stream1.forEach(str->System.out.println(str.getClass().getSimpleName()));
}
}
4.スキップ(スキップし、最初のN要素をスキップして、新しいストリームを返す)
基本フォーマット:Stream<T> skip(long n)
/**
* 测试Stream中skip方法 跳过前几个元素
* @author 16003
*
*/
public class Stream_skip {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Collections.addAll(list, 1,2,3,4,5,6,7,8,9);
//跳过前三个元素
Stream<Integer> stream = list.stream().skip(3);
stream.forEach(str->System.out.println(str));
}
}
5.カウントの
基本形式(このストリーム内の要素の数を返します):long count()
/**
* 测试Stream中count方法 返回流中元素个数
* @author 16003
*
*/
public class Stream_count {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1,2,3,4,5,6,7,8,9,0);
Stream<Integer> stream = list.stream();
long cnt = stream.count();
System.out.println(cnt);
}
}
6. forEachの
基本形式(このストリームの各要素で操作を実行します):void forEach(Consumer<? super T> action)
/**
* Stream中Foreach方法 遍历
* @author 16003
*
*/
public class Stream_foreach {
public static void main(String[] args) {
Stream<String> stream = Stream.of("张三","李四","王五");
stream.forEach(name -> System.out.println(name));
}
}
他のAPIのヘルプドキュメントを表示する:JDK8中国のオンラインヘルプドキュメント