Java 8新特新のStreamストリーム常用操作API

23040 ワード

流れとは?JDK 8は、Streamsストリームが「何をするかではなく、何をするかという原則」を遵守しているという新しい概念を提供しています.ストリームの例では、長い単語を取得し、カウントする必要があることを説明しています.ストリームは表面的にコレクションと似ているように見え、取得データを変換することができます.しかし、彼らの間には著しい違いがあります.
1.ストリームはその要素を保存しません.2、ストリームの操作はデータソースを変更しません.例えば、filterメソッドは元の要素を変更するのではなく、新しいStreamストリーム3を生成します.ストリームの操作はできるだけ不活性に実行されます.これは、結果が必要になるまで操作が実行されないことを意味します.
フローを操作する際の一般的な流れ:1、フローを作成する2、初期フローを他のフローに変換する中間操作を指定します.複数のステップ3、終了操作を含み、結果を生成することができます.これからはこの流れは使えなくなる
次に、Streamsストリームの共通APIについてまとめます.
1、filter(フィルタリング、predicate関数インタフェースを受信し、predicateを満たすすべての要素を含み、consumer消費型インタフェースを内蔵する)基本フォーマット:Stream filter​(Predicate super T> predicate)
/**
 *  Stream 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.limit(前のN個の要素を切り捨て、新しいStreamストリームを返す)基本形式:Stream 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、map(マッピング、要素をマッピングし、マッピング後の新しいStreamsストリームを返し、Functionインタフェースを内蔵)基本フォーマット: Stream map​(Function super T,​? extends R> mapper)
/**
 *   Stream  map 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、skip(スキップ、前のN要素をスキップ、新しいStreamストリームを返す)基本フォーマット:Stream 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、count(このストリームの要素の数を返す)基本フォーマット: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はヘルプドキュメントを表示する:JDK 8中国語オンラインヘルプドキュメント