list 常见循环案例

list 常见循环案例

package com.oldnoop.java.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;

import org.junit.Test;

public class ListDemo {

	@Test
	public void testLoop() {
		List<Integer> list = Arrays.asList(1, 5, 8, 3, 9, 2);
		// 用下标循环
		System.out.println("------------index---------------");
		for (int i = 0; i < list.size(); i++) {
			Integer integer = list.get(i);
			System.out.println(integer);
		}
		for (int i = 0, length = list.size(); i < length; i++) {
			Integer integer = list.get(i);
			System.out.println(integer);
		}
		System.out.println("------------iterator---------------");
		// 用迭代器
		for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
			Integer integer = (Integer) iterator.next();
			System.out.println(integer);
		}
		System.out.println("------------foreach---------------");
		// 用foreach
		for (Integer integer : list) {
			System.out.println(integer);
		}
		System.out.println("-----------stream----------------");
		list.stream().forEach(System.out::println);
		System.out.println("-----------stream2----------------");
		list.stream().forEach((x) -> {
			System.out.println(x);
		});
	}

	// 查找集合中满足条件的元素
	@Test
	public void testFindEle() {
		List<Product> products = findProductsFromDB();
		// 查找小米品牌的商品
		List<Product> productsXiaomi = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("小米".equals(product.getBrand())) {
				productsXiaomi.add(product);
			}
		}
		System.out.println(productsXiaomi);
		// 查找手机分类的商品
		List<Product> productsMobile = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("手机".equals(product.getCategory())) {
				productsMobile.add(product);
			}
		}
		System.out.println(productsMobile);
		// 查找小米品牌的手机
		List<Product> productsXiaomiMobile = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("小米".equals(product.getBrand()) && "手机".equals(product.getCategory())) {
				productsXiaomiMobile.add(product);
			}
		}
		System.out.println(productsXiaomiMobile);

		// 查找价格高于3000的手机
		List<Product> productsMobile3000 = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("手机".equals(product.getCategory()) && product.getPrice() != null && product.getPrice() > 3000) {
				productsMobile3000.add(product);
			}
		}
		System.out.println(productsMobile3000);

		// 查找价格高于2000的小米手机
		List<Product> productsXiaomiMobile2000 = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("手机".equals(product.getCategory()) && "小米".equals(product.getBrand()) && product.getPrice() != null
					&& product.getPrice() > 2000) {
				productsXiaomiMobile2000.add(product);
			}
		}
		System.out.println(productsXiaomiMobile2000);
		System.out.println("-----------------使用stream查找集合中满足条件的元素---------------------");
		productsXiaomiMobile2000 = products.stream().filter(product -> "手机".equals(product.getCategory())
				&& "小米".equals(product.getBrand()) && product.getPrice() != null && product.getPrice() > 2000)
				.collect(Collectors.toList());
		System.out.println(productsXiaomiMobile2000);
	}

	// 统计
	@Test
	public void testStat() {
		List<Product> products = findProductsFromDB();
		// 按分类 对商品进行分组
		// key -> 分类, value是这个分类的商品集合
		Map<String, List<Product>> productsCategoryMap = new HashMap<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			String category = product.getCategory();
			// 判断map中 分类对应的 商品集合是否为null
			List<Product> list = productsCategoryMap.get(category);
			if (list != null) {// 不为null
				// 有则直接使用
				list.add(product);
			} else {// 为null
					// 无则添加
				list = new ArrayList<>();
				list.add(product);
				productsCategoryMap.put(category, list);
			}
		}
		System.out.println(productsCategoryMap);
		// 按品牌对商品进行分组
		// key -> 品牌, value是这个品牌的商品集合
		Map<String, List<Product>> productsBrandMap = new HashMap<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			String brand = product.getBrand();
			// 判断map中 品牌对应的 商品集合是否为null
			List<Product> list = productsBrandMap.get(brand);
			if (list != null) {// 不为null
				// 有则直接使用
				list.add(product);
			} else {// 为null
					// 无则添加
				list = new ArrayList<>();
				list.add(product);
				productsBrandMap.put(brand, list);
			}
		}
		System.out.println(productsBrandMap);

		// key -> 分类_品牌, value是这个品牌_分类的商品集合
		Map<String, List<Product>> productsCateBrandMap = new HashMap<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			String category = product.getCategory();
			String brand = product.getBrand();
			String key = category + "_" + brand;
			// 判断map中 key对应的 商品集合是否为null
			List<Product> list = productsCateBrandMap.get(key);
			if (list != null) {// 不为null
				// 有则直接使用
				list.add(product);
			} else {// 为null
					// 无则添加
				list = new ArrayList<>();
				list.add(product);
				productsCateBrandMap.put(key, list);
			}
		}
		System.out.println(productsCateBrandMap);
		System.out.println("-----------------stream分组----------------------");

		productsCateBrandMap = products.stream()
				.collect(Collectors.groupingBy(product -> product.getCategory() + "_" + product.getBrand()));
		System.out.println(productsCateBrandMap);

		// 按分类,品牌对商品进行分组
		// key -> category 分类,value -> Map (key -> brand品牌, value
		// 是商品集合List<Product>)
		Map<String, Map<String, List<Product>>> productsCateBrandMap2 = new HashMap<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			String category = product.getCategory();
			String brand = product.getBrand();
			// 判断map中key->category分类 对应的 品牌map(productsBrandMap2)是否为null
			Map<String, List<Product>> productsBrandMap2 = productsCateBrandMap2.get(category);
			if (productsBrandMap2 != null) {
				// 拿到分类对应的品牌map -> key是brand品牌,value是商品集合List
				List<Product> list = productsBrandMap2.get(brand);
				if (list != null) {
					list.add(product);
				} else {
					list = new ArrayList<>();
					list.add(product);
					productsBrandMap2.put(brand, list);
				}
			} else {
				productsBrandMap2 = new HashMap<>();
				productsCateBrandMap2.put(category, productsBrandMap2);

				ArrayList<Product> list = new ArrayList<>();
				list.add(product);
				productsBrandMap2.put(brand, list);
			}

		}
		System.out.println(productsCateBrandMap2);
		System.out.println("-----------------stream分组----------------------");

	}

	// 排序
	@Test
	public void testSort() {
		List<Product> products = findProductsFromDB();
		// 按价格对小米的商品进行升序排序
		List<Product> productsXiaomi = new ArrayList<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			if ("小米".equals(product.getBrand())) {
				productsXiaomi.add(product);
			}
		}
		Collections.sort(productsXiaomi, new Comparator<Product>() {
			@Override
			public int compare(Product o1, Product o2) {
				double price1 = o1.getPrice() == null ? 0 : o1.getPrice();
				double price2 = o2.getPrice() == null ? 0 : o2.getPrice();
				return (price1 >= price2) ? 1 : -1;
			}
		});
		productsXiaomi.stream().forEach(System.out::println);
		System.out.println("----------------使用stream------------------");
		productsXiaomi = products.stream()
				.filter(product -> "小米".equals(product.getBrand()))
				.sorted(
						(o1,o2)-> {
							double price1 = o1.getPrice() == null ? 0 : o1.getPrice();
							double price2 = o2.getPrice() == null ? 0 : o2.getPrice();
							return (price1 >= price2) ? 1 : -1;
						}
				)
				.collect(Collectors.toList());
		productsXiaomi.stream().forEach(System.out::println);
		
		// 按价格对不同分类的商品进行排序
		// 按分类 对商品进行分组
		// key -> 分类, value是这个分类的商品集合
		Map<String, List<Product>> productsCategoryMap = new HashMap<>();
		for (int i = 0; i < products.size(); i++) {
			Product product = products.get(i);
			String category = product.getCategory();
			// 判断map中 分类对应的 商品集合是否为null
			List<Product> list = productsCategoryMap.get(category);
			if (list != null) {// 不为null
				// 有则直接使用
				list.add(product);
			} else {// 为null
					// 无则添加
				list = new ArrayList<>();
				list.add(product);
				productsCategoryMap.put(category, list);
			}
		}
		//排序
		for(Iterator<Entry<String, List<Product>>> iter = 
				productsCategoryMap.entrySet().iterator();iter.hasNext();){
			Entry<String, List<Product>> entry = iter.next();
			List<Product> value = entry.getValue();
			Collections.sort(value, new Comparator<Product>() {
				@Override
				public int compare(Product o1, Product o2) {
					double price1 = o1.getPrice() == null ? 0 : o1.getPrice();
					double price2 = o2.getPrice() == null ? 0 : o2.getPrice();
					return (price1 >= price2) ? 1 : -1;
				}
			});
			System.out.println("分类:"+entry.getKey());
			value.stream().forEach(System.out::println);
		}
		System.out.println("----------------使用stream排序分组------------------");
		productsCategoryMap = products.stream()
		.sorted(
				(o1,o2)-> {
					double price1 = o1.getPrice() == null ? 0 : o1.getPrice();
					double price2 = o2.getPrice() == null ? 0 : o2.getPrice();
					return (price1 >= price2) ? 1 : -1;
				}
		)
		.collect(Collectors.groupingBy(product -> product.getCategory()));
		System.out.println("----------------使用stream排序分组测试------------------");
		for(Iterator<Entry<String, List<Product>>> iter = 
				productsCategoryMap.entrySet().iterator();iter.hasNext();){
			Entry<String, List<Product>> entry = iter.next();
			List<Product> value = entry.getValue();
			System.out.println("分类:"+entry.getKey());
			value.stream().forEach(System.out::println);
		}
		
		// 按价格对不同品牌的商品进行排序
	}

	// 查找2个集合中相同的商品
	@Test
	public void testFindSame() {
		// 按id相等为相同商品的原则
		List<Product> list1 = findProductsFromDB();
		List<Product> list2 = findProductsFromDB2();
	}

	// 模拟从数据库得到集合数据
	public List<Product> findProductsFromDB() {
		AtomicLong ids = new AtomicLong();
		String[] names = { "小米9", "THINKPAD R720", "MACBOOK AIR", "DELL 游侠", "oppo FindX", "HP 暗影精灵4", "小米电源",
				"iphone XR" };
		String[] categories = { "手机", "笔记本", "电源" };
		String[] brands = { "小米", "thinkpad", "苹果", "DELL", "OPPO", "惠普" };
		Double[] prices = { 2999.00, 5199.00, 9499.00, 6000.00, 4999.00, 8250.00, 49.00, 6599.00 };
		Product product0 = new Product(ids.incrementAndGet(), names[0], categories[0], brands[0], prices[0]);
		Product product1 = new Product(ids.incrementAndGet(), names[1], categories[1], brands[1], prices[1]);
		Product product2 = new Product(ids.incrementAndGet(), names[2], categories[1], brands[2], prices[2]);
		Product product3 = new Product(ids.incrementAndGet(), names[3], categories[1], brands[3], prices[3]);
		Product product4 = new Product(ids.incrementAndGet(), names[4], categories[0], brands[4], prices[4]);
		Product product5 = new Product(ids.incrementAndGet(), names[5], categories[1], brands[5], prices[5]);
		Product product6 = new Product(ids.incrementAndGet(), names[6], categories[2], brands[0], prices[6]);
		Product product7 = new Product(ids.incrementAndGet(), names[7], categories[0], brands[2], prices[7]);
		return Arrays.asList(product0, product1, product2, product3, product4, product5, product6, product7);
	}

	// 模拟从数据库得到集合数据
	public List<Product> findProductsFromDB2() {
		List<Product> products = findProductsFromDB();
		products.remove(0);
		products.remove(2);
		products.remove(4);
		return products;
	}

	private static class Product {
		private Long id;
		private String name;
		private String category;
		private String brand;
		private Double price;

		public Product() {
			super();
		}

		public Product(Long id, String name, String category, String brand, Double price) {
			super();
			this.id = id;
			this.name = name;
			this.category = category;
			this.brand = brand;
			this.price = price;
		}

		public Long getId() {
			return id;
		}

		public void setId(Long id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getCategory() {
			return category;
		}

		public void setCategory(String category) {
			this.category = category;
		}

		public String getBrand() {
			return brand;
		}

		public void setBrand(String brand) {
			this.brand = brand;
		}

		public Double getPrice() {
			return price;
		}

		public void setPrice(Double price) {
			this.price = price;
		}

		@Override
		public String toString() {
			return "Product [id=" + id + ", name=" + name + ", category=" + category + ", brand=" + brand + ", price="
					+ price + "]";
		}

	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值