Java8の新しいストリームストリーム共通操作API

フローとは何ですか?
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中国のオンラインヘルプドキュメント

おすすめ

転載: blog.csdn.net/xulong5000/article/details/108052344