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

	}

}
发布了29 篇原创文章 · 获赞 34 · 访问量 8144

猜你喜欢

转载自blog.csdn.net/weixin_39634532/article/details/103102069
今日推荐