java中的stream平時最常用的幾個方法

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);

	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章