近期学习lambda表达式,做一些总结
package com.tre.wms.pda.web.controller;
import java.util.*;
import java.util.stream.Collectors;
public class Lambda {
public static void main(String[] args) {
// 创建实体类,增加数据
List<TestList> test = new ArrayList<>();
test.add(new TestList("周大",25,"男","java初级工程师"));
test.add(new TestList("吴二",26,"女","java高级工程师"));
test.add(new TestList("张三",21,"男","java初级工程师"));
test.add(new TestList("李四",23,"女","项目经理"));
test.add(new TestList("王五",23,"男","java初级工程师"));
test.add(new TestList("赵六",23,"女","测试工程师"));
test.add(new TestList("马七",23,"女","Android初级工程师"));
test.add(new TestList("候八",21,"男","java初级工程师"));
test.add(new TestList("孙九",22,"男","java初级工程师"));
System.err.println("****** 原始数据输出 ********");
// 输出数据
for (TestList testValue:test) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
//筛选 只取1个
TestList test1 = test.stream().filter(a-> "男".equals(a.getSex())).findFirst().get();
System.err.println("****** 筛选性别为男的数据 只取第一条 ********");
System.err.println("***姓名:"+test1.getName()+"******年龄:"+test1.getAge()+"*******性别:"+test1.getSex());
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
//筛选 符合条件的所有
List<TestList> test2 = test.stream().filter(a->"男".equals(a.getSex())).collect(Collectors.toList());
System.err.println("****** 筛选性别为男的数据 符合条件的所有 ********");
for (TestList testValue:test2
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
//计算 求和
Integer test3 = test.stream().map(TestList::getAge).reduce(0,Integer ::sum);
System.err.println("********* 年龄求和 **************** "+test3);
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 单个属性去重
List<TestList> test4 = test.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TestList::getSex))), ArrayList::new));
System.err.println("****** 单个属性去重 按照性别去重 ********");
for (TestList testValue:test4
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
//多个属性去重
System.err.println("****** 多个属性去重 按照性别,年龄 去重 ********");
List<TestList> test5 = test.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(
o -> o.getAge() + ";" +
o.getSex() +";"
))
), ArrayList::new));
for (TestList testValue:test5
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 排序 正序
List<TestList> test6 = test.stream()
.sorted(Comparator.comparing(TestList::getSex))
.collect(Collectors.toList());
System.err.println("****** 排序 性别正序 ********");
for (TestList testValue:test6
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 排序 倒序
List<TestList> test7 = test.stream()
.sorted(Comparator.comparing(TestList::getSex).reversed())
.collect(Collectors.toList());
System.err.println("****** 排序 性别倒序 ********");
for (TestList testValue:test7
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 排序 多个字段 正-倒
List<TestList> test8 = test.stream()
.sorted(Comparator.comparing(TestList::getSex).reversed().thenComparing(TestList::getAge).reversed())
.collect(Collectors.toList());
System.err.println("****** 排序 性别正序,年龄倒序 ********");
for (TestList testValue:test8
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
//按照性别分组
Map<String, List<TestList>> test9 = test.stream().collect(Collectors.groupingBy(TestList::getSex));
System.err.println("****** 按照性别分组 ********");
for (Map.Entry<String, List<TestList>> entryUser : test9.entrySet()) {
String key = entryUser.getKey();
List<TestList> test91 = entryUser.getValue();
System.err.println("****** key ******** "+key);
for (TestList testValue:test91
) {
System.err.println("***姓名:"+testValue.getName()+"******年龄:"+testValue.getAge()+"*******性别:"+testValue.getSex());
}
}
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 提取职业属性
List<String> test10 = test.stream().map(TestList::getOccupation).collect(Collectors.toList());
System.err.println("****** 提取职业属性 ********");
System.err.println(test10.stream().collect(Collectors.toList()));
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
// 提取职业属性并去重
List<String> test11 = test.stream().map(TestList::getOccupation).distinct().collect(Collectors.toList());
System.err.println("****** 提取职业属性并去重 ********");
System.err.println(test11.stream().collect(Collectors.toList()));
System.err.println(""); System.err.println("*************分割线**************"); System.err.println("");
}
public static class TestList {
public TestList(String name, int age, String sex, String occupation){
this.name=name;
this.age=age;
this.sex=sex;
this.occupation=occupation;
}
private String name;
private int age;
private String sex;
private String occupation;
public String getOccupation() {
return occupation;
}
public void setOccupation(String occupation) {
this.occupation = occupation;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
}
执行结果
****** 原始数据输出 ********
姓名:周大年龄:25性别:男
姓名:吴二年龄:26性别:女
姓名:张三年龄:21性别:男
姓名:李四年龄:23性别:女
姓名:王五年龄:23性别:男
姓名:赵六年龄:23性别:女
姓名:马七年龄:23性别:女
姓名:候八年龄:21性别:男
姓名:孙九年龄:22****性别:男
分割线*
****** 筛选性别为男的数据 只取第一条 ********
姓名:周大年龄:25****性别:男
分割线*
****** 筛选性别为男的数据 符合条件的所有 ********
姓名:周大年龄:25性别:男
姓名:张三年龄:21性别:男
姓名:王五年龄:23性别:男
姓名:候八年龄:21性别:男
姓名:孙九年龄:22****性别:男
分割线*
********* 年龄求和 **************** 207
分割线*
****** 单个属性去重 按照性别去重 ********
姓名:吴二年龄:26性别:女
姓名:周大年龄:25******性别:男
分割线*
****** 多个属性去重 按照性别,年龄 去重 ********
姓名:张三年龄:21性别:男
姓名:孙九年龄:22性别:男
姓名:李四年龄:23性别:女
姓名:王五年龄:23性别:男
姓名:周大年龄:25性别:男
姓名:吴二年龄:26******性别:女
分割线*
****** 排序 性别正序 ********
姓名:吴二年龄:26性别:女
姓名:李四年龄:23性别:女
姓名:赵六年龄:23性别:女
姓名:马七年龄:23性别:女
姓名:周大年龄:25性别:男
姓名:张三年龄:21性别:男
姓名:王五年龄:23性别:男
姓名:候八年龄:21性别:男
姓名:孙九年龄:22****性别:男
分割线*
****** 排序 性别倒序 ********
姓名:周大年龄:25性别:男
姓名:张三年龄:21性别:男
姓名:王五年龄:23性别:男
姓名:候八年龄:21性别:男
姓名:孙九年龄:22性别:男
姓名:吴二年龄:26性别:女
姓名:李四年龄:23性别:女
姓名:赵六年龄:23性别:女
姓名:马七年龄:23****性别:女
分割线*
****** 排序 性别正序,年龄倒序 ********
姓名:吴二年龄:26性别:女
姓名:李四年龄:23性别:女
姓名:赵六年龄:23性别:女
姓名:马七年龄:23性别:女
姓名:周大年龄:25性别:男
姓名:王五年龄:23性别:男
姓名:孙九年龄:22性别:男
姓名:张三年龄:21性别:男
姓名:候八年龄:21****性别:男
分割线*
****** 按照性别分组 ********
****** key ******** 女
姓名:吴二年龄:26性别:女
姓名:李四年龄:23性别:女
姓名:赵六年龄:23性别:女
姓名:马七年龄:23性别:女
****** key ******** 男
姓名:周大年龄:25性别:男
姓名:张三年龄:21性别:男
姓名:王五年龄:23性别:男
姓名:候八年龄:21性别:男
姓名:孙九年龄:22****性别:男
分割线*
****** 提取职业属性 ********
[java初级工程师, java高级工程师, java初级工程师, 项目经理, java初级工程师, 测试工程师, Android初级工程师, java初级工程师, java初级工程师]
分割线*
****** 提取职业属性并去重 ********
[java初级工程师, java高级工程师, 项目经理, 测试工程师, Android初级工程师]
分割线*