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---------------");
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);
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);
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();
Map<String, List<Product>> productsCategoryMap = new HashMap<>();
for (int i = 0; i < products.size(); i++) {
Product product = products.get(i);
String category = product.getCategory();
List<Product> list = productsCategoryMap.get(category);
if (list != null) {
list.add(product);
} else {
list = new ArrayList<>();
list.add(product);
productsCategoryMap.put(category, list);
}
}
System.out.println(productsCategoryMap);
Map<String, List<Product>> productsBrandMap = new HashMap<>();
for (int i = 0; i < products.size(); i++) {
Product product = products.get(i);
String brand = product.getBrand();
List<Product> list = productsBrandMap.get(brand);
if (list != null) {
list.add(product);
} else {
list = new ArrayList<>();
list.add(product);
productsBrandMap.put(brand, list);
}
}
System.out.println(productsBrandMap);
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;
List<Product> list = productsCateBrandMap.get(key);
if (list != null) {
list.add(product);
} else {
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);
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<String, List<Product>> productsBrandMap2 = productsCateBrandMap2.get(category);
if (productsBrandMap2 != null) {
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);
Map<String, List<Product>> productsCategoryMap = new HashMap<>();
for (int i = 0; i < products.size(); i++) {
Product product = products.get(i);
String category = product.getCategory();
List<Product> list = productsCategoryMap.get(category);
if (list != null) {
list.add(product);
} else {
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);
}
}
@Test
public void testFindSame() {
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 + "]";
}
}
}