public class Demo {
public static void main(String[] args) throws ClassNotFoundException {
List<Goods> list = new ArrayList<>();
Goods goods = new Goods("內褲", 33);
Goods goods2 = new Goods("丁字褲", 31);
Goods goods3 = new Goods("長褲", 32);
list.add(goods);
list.add(goods2);
list.add(goods3);
List<Goods> list2 = new ArrayList<>();
Goods goods4 = new Goods("香蕉", 20);
Goods goods5 = new Goods("蘋果", 12);
Goods goods6 = new Goods("獼猴桃", 24);
list2.add(goods4);
list2.add(goods5);
list2.add(goods6);
// =====================排序===============================================
// 按照商品的價格進行升序
list = list.stream().sorted(Comparator.comparing(Goods::getPrice)).limit(3).collect(Collectors.toList());
// 加上reversed,就是降序排序
/*
* list =
* list.stream().sorted(Comparator.comparing(Goods::getPrice).reversed()).
* collect(Collectors.toList());
*/
// 輸出排序後的信息
list.stream().forEach(element -> System.err.println(element.getName()));
// =======================map:獲取list對象中的某個屬性==============================
// 使用map,獲取屬性的特定信息
List<Double> goodsNameList = list.stream().map(Goods::getPrice).collect(Collectors.toList());
// 另外一種寫法
List<String> goodNameList2 = list.stream().map(element -> element.getName()).collect(Collectors.toList());
goodsNameList.stream().forEach(element -> System.err.println(element));
// ==========================max和min 求最大值 最小值=====================
Optional<Goods> max = list2.stream().max(Comparator.comparing(Goods::getPrice));
Optional<Goods> min = list2.stream().min(Comparator.comparing(Goods::getPrice));
if (max.isPresent()) {
System.out.println("價格最高的水果是:" + max.get().getName());
}
if (min.isPresent()) {
System.err.println("價格最低的水果是:" + min.get().getName());
}
// ========================count 結合filter 條件計數================
// 查找價格大於30的貨物數量
long count = list.stream().filter(good -> good.getPrice() > 30).count();
System.err.println("超過30的商品貨物數量" + count);
// =======================查找與匹配: Stream API 通過
// allMatch、anyMatch、noneMatch、findFirst 和 findAny 方法
// 1.查看價格中是否有偶數
List<Integer> numbers = Arrays.asList(2, 2, 2);
if (numbers.stream().anyMatch(i -> i % 2 == 0)) {
System.out.println("集合裏有偶數!");
}
// 2.查看 是否全部都是偶數
if(numbers.stream().allMatch(i ->i %2 == 0)) {
System.out.println("集合中全部都是偶數");
}
// 3.findFirst: 查出第一個的平方能被3整除的數字
List<Integer> numberList = Arrays.asList(2,3,4,5);
Optional<Integer> number = numberList.stream().filter(i -> i*i%3 ==0).findFirst();
System.err.println("第一個的平方能夠被3整除的數字是:"+ number);
//=====================歸約:reduce========================
//1.計算數組中數字之和
List<Integer> numList = Arrays.asList(3,3,4,3,54);
int sum = numList.stream().reduce(0, (a,b)->a*b);
//reduce(0, (a,b)->a+b) : 0,表示計算結果的初始化, (a,b)->a+b 是計算規則, 如果是乘法的話 ,第一個參數0 要改爲1
System.err.println("數組元素之和是:"+ sum);
}
}