package com.sinosoft.web.controller.test.lambda;
import com.sinosoft.common.utils.DateUtils;
import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class LambdaForeachList {
@Test
public void lambdaList() {
List<Empoyee> list = new ArrayList<>();
list.add(new Empoyee("a", 3, 2));
list.add(new Empoyee("b", 2, 1));
list.add(new Empoyee("c", 1, 3));
list.add(new Empoyee("d", 4, 4));
list.add(new Empoyee("e", 5, 5));
list.add(new Empoyee("e", 5, 5));
/*
1 使用foreach进行遍历集合
item可以是任意值 类似于for循环中的循环值
*/
list.forEach(item -> {
System.out.println(item);
});
System.out.println("#####################################");
list.forEach(item -> {
item.setName(item.getName() + "测试");
System.out.println(item.toString());
});
/*
使用流操作
*/
//去重 distinct()去重;collect.(Collectors.toList()).封装集合
List<Empoyee> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println("去重:++++++++++++++++++++++++++++++");
distinctList.forEach(item -> {
System.out.println(item);
});
//排序 sorted((第一个对象),第二个对象)->返回值) (升降序看是第几个对象与第几个对象比较)
List<Empoyee> sortedList = list.stream().sorted((o1, o2) -> o1.getAge() - o2.getAge()).collect(Collectors.toList());
System.out.println("排序:-----------------------------------");
sortedList.forEach(item -> {
System.out.println(item);
});
//过滤 filter(item->{}) item为每一项 按照自己的需求来筛选list中的数据
List<Empoyee> filterList = list.stream().filter(item -> item.getAge() > 3).collect(Collectors.toList());
System.out.println("过滤:(((((((((((((((((((((((");
filterList.forEach(item -> System.out.println(item));
//map 提取对象中的某一个元素 用每一项来获得属性(也可以直接用对象::get属性)
List<String> mapList = list.stream().map(Empoyee::getName).collect(Collectors.toList());
System.out.println(" 使用map提取对象中的某一个属性进行存值))))))))))))))))))))))))))))))");
mapList.forEach(item -> System.out.println(item));
//统计 sum() mapToDouble()转换成double 还有其他类型转换
double sum = list.stream().mapToDouble(Empoyee::getAge).sum();
Long sumLong = list.stream().mapToLong(Empoyee::getSize).sum();
System.out.println("总和(double):" + sum);
System.out.println("总和(long):" + sumLong);
//分组 Collectors.groupingBy(属性名)
Map<Integer, List<Empoyee>> map = list.stream().collect(Collectors.groupingBy(Empoyee::getAge));
//todo 使用lambda解析map
//多重分组 Collectors.groupingBy(属性,Collectors.groupingBy(属性))
//Map<String,Map<Integer,List<Empoyee>>>mapMap = list.stream().collect(Collectors.groupingBy(i->i.getAge(),Collectors.groupingBy(l->l.getClass().getField("size"))));
//分组并计算综合
//Map<String,Map<Integer, LongSummaryStatistics>> mapStatistics = list.stream().collect(Collectors.groupingBy(a->a.ge));
//集合比较的简写方式:
list.sort((o1, o2) -> {
return o1.getAge() - o2.getAge();
});
System.out.println("sort:OOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
list.forEach(item -> {
System.out.println(item);
});
}
/**
* 使用lambda表达式遍历map集合
*/
@Test
public void testLambdaMap() {
Map<String, String> map = new HashMap<>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
//第一种 使用map的foreach方法加上Java8的lambda表达式
map.forEach((k, v) -> {
System.out.println(k + "-" + v);
});
//第二种 使用Map.Entry来遍历map的条目
for (Map.Entry<String, String> it : map.entrySet()) {
System.out.println(it.getKey() + "-" + it.getValue());
}
//第三种 可以使用for结合map的keySet和values的方法来遍历
for (String a : map.keySet()) {
System.out.println(a);
}
for (String b : map.values()) {
System.out.println(b);
}
//第四种 使用迭代器
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();//返回所有的entry实体
while (iterator.hasNext()) {
Map.Entry<String, String> next1 = iterator.next();
String key = next1.getKey();
String value = next1.getValue();
System.out.println(key);
System.out.println(value);
}
//通过键来遍历
Iterator keyIterator = map.keySet().iterator();
while (keyIterator.hasNext()) {
System.out.println(keyIterator.next());
}
//通过值来遍历
}
@Test
public void mytest() {
Date a= new Date();
Date b= new Date();
}
}