package com.glch.test;
import com.glch.base.util.StringUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author zhongzhilong
* @date 2021-03-25
* @description List的stream功能测试
*/
public class ListStreamTest {
public static void main(String[] args) {
List<Animal> list = new ArrayList<>();
list.add(new Animal("小狗", 3, 1));
list.add(new Animal("小猫", 4, 0));
list.add(new Animal("小马", 5, 1));
// 获取所有动物的名称,并且转为List
List<String> nameList = list.stream().map(Animal::getName).collect(Collectors.toList());
// 获取所有的动物名称,并且中间加入name不等于空的过滤,并且转为set
Set<String> set = list.stream().filter(animal -> !StringUtil.isEmpty(animal.getName())).map(animal -> animal.getName()).collect(Collectors.toSet());
// 简洁版本
Set<String> set2 = list.stream().map(animal -> animal.getName()).collect(Collectors.toSet());
// 获取tag = 1的动物列表
List<Animal> tagList = list.stream().filter(animal -> animal.getTag() == 1).collect(Collectors.toList());
// 获取动物的总年龄之和
int sum = list.stream().mapToInt(Animal::getAge).sum();
// 对list按年龄降序查询
List<Animal> animalList = list.stream.sorted(Comparator.comparing(Animal::getAge).reversed()).collect(Collectors.toList());
// 对list按年龄升序查询
List<Animal> animalList = list.stream.sorted(Comparator.comparing(Animal::getAge)).collect(Collectors.toList());
// 1)list进行去重,2)按照年龄降序 3)排除标记为0的数据
List<Animal> reusltList = list.stream().filter(animal -> animal.getTag() != 0).sorted(Comparator.comparing(Animal::getAge).reversed()).distinct().collect(Collectors.toList());
}
static class Animal {
private String name;
private Integer age;
private Integer tag;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Integer getTag() {
return tag;
}
public void setTag(Integer tag) {
this.tag = tag;
}
public void setAge(Integer age) {
this.age = age;
}
public Animal(String name, Integer age, Integer tag) {
this.name = name;
this.age = age;
this.tag = tag;
}
}
}
List<Map<String,Object>> 转List和String的方法
package liststream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author zhongzhilong
* @date 2021/4/19
* @decription
*/
public class ListToStringTest {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("id", "1");
list.add(map);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "小张");
map2.put("id", "2");
list.add(map2);
// 1、List<Map<String,Object>>中获取List<String>
List<String> stringList = list.stream().map(e -> e.get("id").toString()).collect(Collectors.toList());
stringList.forEach(e -> {
System.out.print(e + " ");
});
System.out.println("\n");
// 2、List<Map<String,Object>>中获取String
String idString = list.stream().map(e -> e.get("id").toString()).collect(Collectors.joining(","));
System.out.println("idString = "+idString);
}
}