jdk8新引入Stream类的使用
使用stream对集合去重代码如下:
List<String> list1 = new ArrayList<>();
list1.add("zhangsan");
list1.add("lisi");
List<String> list2 = new ArrayList<>();
list2.add("lisi");
List<String> list3 = new ArrayList<>();
list3 = list1.stream().map(x -> {
if (!list2.contains(x)) {
return x;
} else {
return "";
}
}
).filter(x -> x.length() > 0).collect(Collectors.toList());
System.out.println(list3);
也可以使用 (两行代码搞定)
list2.addAll(list1);
list2= list2 .stream().distinct().collect(Collectors.toList());
简单实用不需要在进行多个for循环去重
filter的使用:(简单粗暴)
list1=list1.stream().filter(x->x.length()>5).collect(Collectors.toList()); System.out.println(list1);
flatmap(扁平化)的使用:
List<String> list1 = new ArrayList<>(); List<String> list2 = new ArrayList<>(); String str="a,d,a,d,s,d,s,s,a,h,u,i,u,w,a,b"; list1.add(str); list2= list1.stream().filter(x->x.length()>0).flatMap(x->Stream.of(x.split(","))).filter(x->{ if (x.equals("w")){ return true; }else return false; }).collect(Collectors.toList()); System.out.println(list2);
map和reduce的使用
Set<String> set =new HashSet<String>(); set.add("li,si"); set.add("w,a,n,g,w,u"); set.add("z,h,a,n,g,s,a,n"); set.add("w,a,n,g,m,a,z,i"); String str= set.stream().sorted(Comparator.naturalOrder()).filter(x->x.length()>1).flatMap(m-> Stream.of(m.split(","))).map( x->{ if (!x.equals("w")){ System.out.println(x); return x; }else return ""; } ).reduce((m,n)->m+n).get(); System.out.println(str);