Java 8 Stream(集約操作)の一般的なapiとparallelStreamの主な違い
6560 ワード
/**
* Stream
*/
//
String[] arr = new String[]{"a", "b", "c"};
Stream stream = Arrays.stream(arr);
Stream stream3 = Stream.of(arr);
//
List list = Arrays.asList("a", "b", "c");
Stream stream1 = list.stream();
//
Stream stream2 = Stream.of("a", "b", "c");
boolean flag = false;
ArrayList userList = new ArrayList<>();
userList.add(new User(3, "wangwu"));
userList.add(new User(2, "lisi"));
userList.add(new User(4, "zhaoliu"));
userList.add(new User(1, "zhangsan"));
/**
* Streams api
*/
userList.forEach(user -> System.out.println(user));
System.out.println("=======================forEach() =======================");
userList.stream().forEach(user -> System.out.println(user));
System.out.println("=======================sorted() =======================");
userList.stream().sorted(Comparator.comparing(User::getId)).forEach(user -> System.out.println(user));
System.out.println("=======================filter() =======================");
userList.stream().filter((User user) -> user.getId() != 2).forEach(user -> System.out.println(user));
System.out.println("=======================limit() n 1 , n=======================");
userList.stream().limit(1).forEach(user -> System.out.println(user));
System.out.println("=======================skip() n , n, 1 =======================");
userList.stream().skip(1).limit(1).forEach(user -> System.out.println(user));
if (flag) {
userList.add(new User(1, "zhangsan"));
userList.add(new User(1, "zhangsan"));
userList.add(new User(1, "zhangsan"));
System.out.println("=======================distinct() equals hashCode =======================");
userList.stream().distinct().forEach(user -> System.out.println(user));
}
System.out.println("=======================summaryStatistics() avg/sum/count/max/min=======================");
IntSummaryStatistics intSummaryStatistics = userList.stream().mapToInt(user -> user.getId()).summaryStatistics();
System.out.println(" :" + intSummaryStatistics.getAverage());
System.out.println(" :" + intSummaryStatistics.getSum());
System.out.println(" :" + intSummaryStatistics.getCount());
System.out.println(" :" + intSummaryStatistics.getMax());
System.out.println(" :" + intSummaryStatistics.getMin());
System.out.println("=======================map() , =======================");
List collect = userList.stream().map(user -> user.getUsername()).collect(Collectors.toList());
collect.stream().forEach(name -> System.out.println(name));
System.out.println("======================= :String:toUpperCase =======================");
List collect4 = list.stream().map(String::toUpperCase).collect(Collectors.toList());
collect4.stream().forEach(s -> System.out.println(s));
System.out.println("=======================flatMap() Stream Stream =======================");
// Integer
Stream> listStream = Stream.of(Arrays.asList(1, 2, 3), Arrays.asList(4, 5));
// Stream
Stream rStream = listStream.flatMap((Function, Stream>) i -> i.stream());
// Stream List
List collect1 = rStream.collect(Collectors.toList());
System.out.println(" :" + collect1.size());
collect1.stream().forEach(i -> System.out.println(i));
System.out.println("findFirst() ");
User user = userList.stream().limit(1).collect(Collectors.toList()).get(0);
System.out.println(user);
User user1 = userList.stream().findFirst().get();
System.out.println(user1);
/**
*
*/
IntStream.of(new int[]{1, 2, 3, 4}).forEach(i -> System.out.println(i));
IntStream.range(1, 3).forEach(i -> System.out.println(i));//
IntStream.rangeClosed(1, 3).forEach(i -> System.out.println(i));
/**
* Stream
*/
// String
String s = Arrays.stream(arr).collect(Collectors.joining()).toString();
System.out.println(" String:" + s);
// String
String[] objects = Arrays.stream(arr).toArray(String[]::new);
System.out.println(" String :" + Arrays.toString(objects));
// list
List collect2 = Arrays.stream(arr).collect(Collectors.toList());
System.out.println(" list:");
collect2.forEach(s1 -> System.out.println(s1));
// set
Set collect3 = Arrays.stream(arr).collect(Collectors.toSet());
System.out.println(" set:");
collect3.forEach(s1 -> System.out.println(s1));
/**
* stream parallelStream :
* stream ,parallelStream ( )
* stream ,parallelStream
* parallelStream.forEachOrdered
* parallelStream stream
*/
String a[] = {"1","2","3","4","5","6"};
List ints = Arrays.asList(a);
System.out.println("stream ");
ints.stream().forEach(x -> System.out.print(x));//
System.out.println("parallelStream ");
ints.parallelStream().forEach(x -> System.out.print(x));//
System.out.println("parallelStream.forEachOrdered ");
ints.parallelStream().forEachOrdered(x -> System.out.print(x));//
注意:
1.streamのforEachが通常のforサイクルと異なるのは、前者はサイクル内部でcontinueとbreakを使用できないが、returnを使用することができ、その機能は通常のforサイクルのcontinueに等しい