package com.hf.mypractice.Javabase;
import com.hf.mypractice.model.User;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description: jdk1.8 stream
* @Date: 2019/1/31
* @Auther:
*/
public class Jdk8stream {
/**
* 擷取stream的方式:
* // 1、數組
* String[] arr = new String[]{"ab", "cd", "ef"};
* Stream<String> arrStream = Arrays.stream(arr);
* // 2、集合
* List<String> list = Arrays.asList("ab", "cd", "ef");
* Stream<String> colStream = list.stream();
* // 3、值
* Stream<String> stream = Stream.of("ab", "cd", "ef");
* @param args
*/
public static void main(String[] args) {
List<User> list = Arrays.asList(
new User("tom", 13),
new User("jack", 12),
new User("huahua", 18),
new User("huahua", 18),
new User("huahua", 30)
);
/**周遊集合**/
list.stream().forEach(user -> {
System.out.println("name:" + user.getName() + ",age:" + user.getAge());
});
/**周遊數組**/
String[] arr = new String[]{"ab", "cd", "ef","ef"};
Stream<String> arrStream = Arrays.stream(arr);
arrStream.forEach(value -> {
System.out.println("value:" + value);
});
/**周遊值**/
Stream.of(1,2,3,4,5).forEach(i -> {
System.out.println("i:" + i);
});
/**排序操作**/
/**1.正常的lambada操作**/
Collections.sort(list,(user1,user2) -> {
return user1.getAge() - user2.getAge();
});
list.forEach(user -> {
System.out.println("排序後name:" + user.getName() + ",age:" + user.getAge() );
});
/**stram使用sorted()方法排序資料**/
/**指定字段自然排序,按照Comparator定義好的順序**/
list.stream().sorted(Comparator.comparing(User::getAge)).forEach(user -> {
System.out.println("排序後name:" + user.getName() + ",age:" + user.getAge() );
});
/**指定字段逆序排序**/
list.stream().sorted(Comparator.comparing(User::getAge).reversed()).forEach(user -> {
System.out.println("逆序排序後name:" + user.getName() + ",age:" + user.getAge() );
});
/**指定字段自定義排序的方法**/
list.stream().sorted(Comparator.comparing(User::getAge,(age1,age2) -> {
return age2 - age1;
})).forEach(user -> {
System.out.println("what:" + user.toString());
});
/**filter():使用該方法過濾**/
/**user.getAge() > 13 是過濾條件,相當于if()括号中的内容**/
list.stream().filter((User user) -> user.getAge() > 12).forEach(user -> {
System.out.println("filter -> name:" + user.getName() + ",age:" + user.getAge());
});
/**limit():使用該方法截斷**/
/**輸出集合前2個元素**/
list.stream().limit(2).forEach(user -> {
System.out.println("limit -> name:" + user.getName() + ",age:" + user.getAge());
});
/**skip():與limit互斥,使用該方法跳過元素,指跳過幾個元素**/
list.stream().skip(2).forEach(user -> {
System.out.println("skip -> name:" + user.getName() + ",age:" + user.getAge());
});
/**distinct():使用該方法去重,注意:必須重寫對應泛型的hashCode()和equals()方法**/
Arrays.stream(arr).distinct().forEach(value -> {
System.out.println("after distinct:" + value);
});
list.stream().distinct().forEach(user -> {
System.out.println("distinct -> name:" + user.getName() + ",age:" + user.getAge());
});
/***根據上述方法,完成去重+按照年齡大于15以後從小到大+隻取前二**/
list.stream().distinct().filter((User user) -> user.getAge() > 15).sorted(Comparator.comparing(User::getAge,(age1,age2) -> {
return age1 - age2;
})).limit(2).forEach(user -> {
System.out.println("輸出的結果是name:" + user.getName() + ",age:" + user.getAge());
});
/**對一個集合中去掉所有的奇數**/
List<Integer> numList = new ArrayList<Integer>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
//注意:過濾條件中的表示是要儲存的
numList = numList.stream().filter(num -> (num % 2 == 0)).collect(Collectors.toList());
numList.forEach(num -> {
System.out.println("偶數為:" + num);
});
/**max,min,sum,avg,count **/
IntSummaryStatistics statistics = list.stream().mapToInt(user -> user.getAge()).summaryStatistics();
System.out.println("最大的:" + statistics.getMax());
System.out.println("平均的:" + statistics.getAverage());
System.out.println("最小的:" + statistics.getMin());
System.out.println("總數:" + statistics.getCount());
System.out.println("總和:" + statistics.getMax());
/**擷取第一個元素**/
User user = list.stream().findFirst().get();
System.out.println("第一個元素:" + user.toString());
}
}
本文轉自:https://blog.csdn.net/chenhao_c_h/article/details/80691284