list);
测试结果:
2. List根据对象某个字段去重:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
* <p>测试user<p>
* @version 1.0
* @author li_hao
* @date 2018年7月18日
public class User {
private String userid;
private String username;
public User(String userid, String username) {
super();
this.userid = userid;
this.username = username;
public String getUserid() {
return userid;
public void setUserid(String userid) {
this.userid = userid;
public String getUsername() {
return username;
public void setUsername(String username) {
this.username = username;
@Override
public String toString() {
return "User [userid=" + userid + ", username=" + username + "]";
* list Stream根据对象userid字段去重
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("1","张三"));
list.add(new User("1","zhangsan"));
list.add(new User("2","李四"));
list.add(new User("2","李四"));
list.add(new User("3","刘大壮"));
System.out.println("根据userid去重前:" + list);
List<User> listRmdup = new ArrayList<User>();
list.stream()
.collect(Collectors.groupingBy(User :: getUserid)) //把list中数据根据userid分组
.forEach((String userid, List<User> ls) -> { //遍历分组
listRmdup.add(ls.get(0)); //取分组中的首个userid的对象存入新的listlistRmdup中
// 分开写
// Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(User :: getUserid)); //把list中数据根据userid分组
// collect.forEach((String userid, List<User> ls) -> { //遍历分组
// listRmdup.add(ls.get(0)); //取分组中的首个userid的对象存入新的listlistRmdup中
// });
System.out.println("根据userid去重后:" + listRmdup);
测试结果:
根据userid去重前:[User [userid=1, username=张三], User [userid=1, username=zhangsan], User [userid=2, username=李四], User [userid=2, username=李四], User [userid=3, username=刘大壮]]
根据userid去重后:[User [userid=1, username=张三], User [userid=2, username=李四], User [userid=3, username=刘大壮]]
3. 对比两个List,返回两个list中:合并后集合、合并去重后的集合、相同的集合、不同的集合、list1中不在list2中的集合、list2不在list1中的集合:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class TestStream {
* 对比两个list,返回两个list中:合并后集合、合并去重后的集合、相同的集合、不同的集合、list1中不在list2中的集合、list2不在list1中的集合
* @param list1 集合1
* @param list2 集合2
* @param cmpType 比较类型返回:a:合并后集合;b:合并去重后的集合;c:相同的集合;d:不同的集合;e:list1中不在list2中的集合;f:list2不在list1中的集合;
* @return List 返回处理后的集合
* 例如:
* list1 :[1, 2, 3, 3, 4, 5, 6]
* list2 :[3, 4, 4, 7, 8]
* a:合并后集合,listAll:[1, 2, 3, 3, 4, 5, 6, 3, 4, 4, 7, 8]
* b:合并去重后的集合;[1, 2, 3, 4, 5, 6, 7, 8]
* c:相同的集合;[3, 4]
* d:不同的集合;[1, 2, 5, 6, 7, 8]
* e:list1中不在list2中的集合;[1, 2, 5, 6]
* f:list2不在list1中的集合;[7, 8]
public static List<String> compareList(List<String> list1, List<String> list2, String cmpType){
List<String> retList = new ArrayList<String>();
List<String> listAll = new ArrayList<String>();
listAll.addAll(list1);
listAll.addAll(list2);
if("a".equals(cmpType)){
//合并后的集合
retList = listAll;
if("b".equals(cmpType)){
//合并去重后的集合
retList = listAll.stream().distinct().collect(Collectors.toList());
if("c".equals(cmpType) || "d".equals(cmpType) || "e".equals(cmpType) || "f".equals(cmpType)){
//相同的集合
List<String> listSameTemp = new ArrayList<String>();
list1.stream().forEach(a -> {
if(list2.contains(a))
listSameTemp.add(a);
retList = listSameTemp.stream().distinct().collect(Collectors.toList());
//不同的集合
if("d".equals(cmpType)){
List<String> listTemp = new ArrayList<>(listAll);
listTemp.removeAll(retList);
retList = listTemp;
//list1中不在list2中的集合
if("e".equals(cmpType)){
List<String> listTemp = new ArrayList<>(list1);
listTemp.removeAll(retList);
retList = listTemp;
//list2中不在list1中的集合
if("f".equals(cmpType)){
List<String> listTemp = new ArrayList<>(list2);
listTemp.removeAll(retList);
retList = listTemp;
return retList;
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add(new String("1"));
list1.add(new String("2"));
list1.add(new String("3"));
list1.add(new String("3"));
list1.add(new String("4"));
list1.add(new String("5"));
list1.add(new String("6"));
List<String> list2 = new ArrayList<String>();
list2.add(new String("3"));
list2.add(new String("4"));
list2.add(new String("4"));
list2.add(new String("7"));
list2.add(new String("8"));
System.out.println("list1:" + list1);
System.out.println("list2:" + list2);
System.out.println("合并后集合:" + compareList(list1, list2, "a"));
System.out.println("合并去重后的集合:" + compareList(list1, list2, "b"));
System.out.println("相同的集合:" + compareList(list1, list2, "c"));
System.out.println("不同的集合:" + compareList(list1, list2, "d"));
System.out.println("list1中不在list2中的集合:" + compareList(list1, list2, "e"));
System.out.println("list2中不在list1中的集合:" + compareList(list1, list2, "f"));
测试结果:
4. 从一个对象集合中获取每个对象的某个值返回一个新的集合:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
* <p>测试user<p>
* @version 1.0
* @author li_hao
* @date 2018年7月18日
public class User {
private String userid;
private String username;
public User(String userid, String username) {
super();
this.userid = userid;
this.username = username;
public String getUserid() {
return userid;
public void setUserid(String userid) {
this.userid = userid;
public String getUsername() {
return username;
public void setUsername(String username) {
this.username = username;
@Override
public String toString() {
return "User [userid=" + userid + ", username=" + username + "]";
* 从一个对象集合中获取每个对象的某个值返回一个新的集合
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("1","张三"));
list.add(new User("2","李四"));
list.add(new User("3","刘大壮"));
System.out.println("处理前:" + list);
List<String> Useridlist = list.stream().map(User :: getUserid).collect(Collectors.toList());
System.out.println("处理后:" + Useridlist);
测试结果: