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