java8中的stream对List的一些操作
java 8中新增了Stream流,大大简化了对各种数据类型的操作;
下面我总结了一些Stream对各种数据结构的操作;
准备数据:
public class Student {
private String age;
private Integer sex;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
public class Demo {
private String name;
private String age;
private Integer sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Demo(String age, Integer sex) {
super();
this.age = age;
this.sex = sex;
}
}
一.List
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Test {
@org.junit.Test
public void test() {
List list = new ArrayList<>();
Student student1 = new Student();student1.setAge("12");student1.setSex(0);
Student student2 = new Student();student2.setAge("13");student2.setSex(2);
Student student3 = new Student();student3.setAge("11");student3.setSex(1);
Student student4 = new Student();student4.setAge("18");student4.setSex(1);
Student student5 = new Student();student5.setAge("18");student5.setSex(0);
Student student6 = new Student();student6.setAge("18");student6.setSex(2);
Student student7 = new Student();student7.setAge("18");student7.setSex(2);
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
list.add(student6);
list.add(student7);
List demos = new ArrayList();
demos = printData(demos, list);
// printSexequal0(demos);
// filterAge(demos);
// sort(demos);
// pour(demos);
// pour2(demos);
// moreSort(demos);
// morePour(demos);
groupByAge(demos);
}
/**
* 数据打印
* @param demos
* @param list
*/
public List printData(List demos ,List list) {
demos = list.stream().map(student -> new Demo(student.getAge(),student.getSex())).collect(Collectors.toList());
/*demos.forEach(demo ->{
System.out.println(demo.getAge());
});*/
return demos;
}
/**
* 打印性别为0的数据
* @param demos
*/
public void printSexequal0(List demos) {
List collect = demos.stream().filter(demo -> demo.getSex() == 0).distinct().collect(Collectors.toList());
collect.forEach(item ->{
System.out.println("\n"+item.getAge()+":"+item.getSex());
});
}
/**
* 过滤年龄大于12的信息
* @param demos
*/
public void filterAge(List demos) {
List collect = demos.stream().filter(demo -> Integer.valueOf(demo.getAge())>12).collect(Collectors.toList());
collect.forEach(demo ->{
System.out.println(demo.getAge()+":"+demo.getSex());
});
}
/**
* 数据排序
* @param demos
*/
public void sort(List demos) {
List collect = demos.stream().sorted((s1,s2) -> s1.getAge().compareTo(s2.getAge())).collect(Collectors.toList());
collect.forEach(demo -> {
System.out.println(demo.getAge());
});
}
/**
* 倒叙
* @param demos
*/
public void pour(List demos) {
ArrayList demoArray = (ArrayList)demos;
demoArray.sort(Comparator.comparing(Demo::getAge).reversed());
demoArray.forEach(demo -> {
System.out.println(demo.getAge());
});
}
/**
* 倒叙2
* @param demos
*/
public void pour2(List demos) {
ArrayList demoArray = (ArrayList)demos;
Comparator comparator = (h1,h2) -> h1.getAge().compareTo(h2.getAge());
demoArray.sort(comparator.reversed());
demoArray.forEach(demo -> {
System.out.println(demo.getAge());
});
}
/**
* 多条件排序--正序
* @param demos
*/
public void moreSort(List demos) {
demos.sort(Comparator.comparing(Demo::getSex).thenComparing(Demo::getAge));
demos.forEach(demo ->{
System.out.println(demo.getSex()+":"+demo.getAge());
});
}
/**
* 多条件倒叙
* @param demos
*/
public void morePour(List demos) {
demos.sort(Comparator.comparing(Demo::getSex).reversed().thenComparing(Demo::getAge));
demos.forEach(demo ->{
System.out.println(demo.getSex()+":"+demo.getAge());
});
}
/**
* 分组
* @param demos
*/
public void groupByAge(List demos) {
Map> collect = demos.stream().collect(Collectors.groupingBy(Demo::getAge));
collect.forEach((key,value)->{
value.forEach(demo ->{
System.out.println(key+":"+demo.getSex());
});
});
}
}
filter
@SuppressWarnings("unused")
public void filterTest(List demos) {
String age = "12";
String sex = "0";
List collect = demos.stream().filter(demo -> {
if(age!=null) {
return Integer.parseInt(demo.getAge())>Integer.parseInt(age);
}else {
return true;
}
}).filter(demo ->{
if(sex!=null) {
return demo.getSex() ==Integer.parseInt(sex);
}else {
return true;
}
}).collect(Collectors.toList());
collect.forEach(demo ->{
System.out.println(demo.getAge()+":"+demo.getSex());
});
}
多条件排序和去重复测试
@Test
public void testMoreSort() {
List list = new ArrayList<>();
Entrys item = new Entrys();
item.setOne(1);
item.setTwo(1);
Entrys item1 = new Entrys();
item1.setOne(1);
item1.setTwo(2);
Entrys item2 = new Entrys();
item2.setOne(1);
item2.setTwo(3);
Entrys item3 = new Entrys();
item3.setOne(1);
item3.setTwo(4);
Entrys item4 = new Entrys();
item4.setOne(2);
item4.setTwo(1);
Entrys item5 = new Entrys();
item5.setOne(2);
item5.setTwo(2);
Entrys item6 = new Entrys();
item6.setOne(2);
item6.setTwo(3);
Entrys item7 = new Entrys();
item7.setOne(2);
item7.setTwo(4);
Entrys item8 = new Entrys();
item8.setOne(3);
item8.setTwo(1);
Entrys item9 = new Entrys();
item9.setOne(3);
item9.setTwo(2);
Entrys item10 = new Entrys();
item10.setOne(3);
item10.setTwo(3);
Entrys item11 = new Entrys();
item11.setOne(4);
item11.setTwo(4);
list.add(item1);
list.add(item2);
list.add(item3);
list.add(item4);
list.add(item5);
list.add(item6);
list.add(item7);
list.add(item8);
list.add(item9);
list.add(item10);
list.add(item11);
list.sort(Comparator.comparing(Entrys::getOne).thenComparing(Entrys::getTwo));
list.forEach(demo ->{
System.out.println(demo.getOne()+":"+demo.getTwo());
});
}
@Test
public void testDic() {
List list = new ArrayList<>();
Models model = new Models();
model.setName("111");
model.setAge("238");
model.setSemi_fid("xxxcqqccbbb");
model.setTid("111111");
Models model1 = new Models();
model1.setName("11122312");
model1.setAge("237");
model1.setSemi_fid("xxxccqcbbb");
model1.setTid("11111133");
Models model2 = new Models();
model2.setName("111333123");
model2.setAge("236");
model2.setSemi_fid("xxxccqcbbb");
model2.setTid("111111");
Models model3 = new Models();
model3.setName("1113213");
model3.setAge("236");
model3.setSemi_fid("xxxccqqcbbb");
model3.setTid("111111");
Models model4 = new Models();
model4.setName("feng");
model4.setAge("25");
model4.setSemi_fid("xxxcccqqqbbb");
model4.setTid("111111");
Models model5 = new Models();
model5.setName("hao");
model5.setAge("23");
model5.setSemi_fid("xxxcccqqqbbb");
model5.setTid("111111");
list.add(model);
list.add(model1);
list.add(model2);
list.add(model3);
list.add(model4);
list.add(model5);
//顺序不变
List collect = list.stream().distinct().collect(Collectors.toList());
collect.forEach(demo ->{
System.out.println(demo.getName()+":"+demo.getAge()+":"+demo.getSemi_fid()+":"+demo.getTid());
});
//顺序发生变化
// List distinctClass = classEntities.stream().
// collect(
// Collectors.collectingAndThen(
// Collectors.toCollection(
// () -> new TreeSet<>(
// Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()
// ))), ArrayList::new));
/* ArrayList collect = list.stream().
collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() ->new TreeSet(
Comparator.comparing(demo -> demo.getSemi_fid()+";"+demo.getTid())
)
), ArrayList::new)
);
collect.forEach(demo ->{
System.out.println(demo.getName()+":"+demo.getAge()+":"+demo.getSemi_fid()+":"+demo.getTid());
});*/
}
}
class Entrys{
private int one;
private int two;
public int getOne() {
return one;
}
public void setOne(int one) {
this.one = one;
}
public int getTwo() {
return two;
}
public void setTwo(int two) {
this.two = two;
}
public class Models {
private String name;
private String semi_fid;
private String tid;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSemi_fid() {
return semi_fid;
}
public void setSemi_fid(String semi_fid) {
this.semi_fid = semi_fid;
}
public String getTid() {
return tid;
}
public void setTid(String tid) {
this.tid = tid;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public int hashCode() {
return (this.getSemi_fid()+this.getTid()).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Models) {
Models item = (Models)obj;
if(this.getSemi_fid().equals(item.getSemi_fid()) && this.getTid().equals(item.getTid())) {
return true;
}else {
return false;
}
}else {
return false;
}
}
}