1、list去重
(1)单个list集合对某个字段去重
for (int i = 0 ;i<successList.size()-1; i++) {
for (int j = successList.size()-1; j>i; j--) {
if (successList.get(j).getName().equals(successList.get(i).getName())) {
repeatList.add(successList.get(j));
}
}
}
(2)2个list集合对某个字段去重
for (int i = 0; i < successList.size(); i++) {
User user = successList.get(i);
if(!listDb.stream().filter(T -> T.getName().equals(user .getName())).findAny().isPresent()) {
repeatList.add(user );
}
}
(3)使用Set
List<User> newList = new ArrayList<User>();
Set<String> set = new HashSet<String>();
for (User user : list) {
String userName = user.getName();
if (!set.contains(userName)) { //set中不包含重复的
set.add(userName);
newList.add(user);
}
}
System.out.println("Set去重后的集合: " + newList);
(4)lambda表达式对两个List根据某个属性去重
第一种 循环去重
public class LambdaDemo {
public static void main(String[] args) {
List<Loginfo> list1 = new ArrayList<>();
Loginfo Loginfo1 = new Loginfo();
Loginfo1.setId(1);
Loginfo1.setLoginname("admin1");
Loginfo Loginfo3 = new Loginfo();
Loginfo3.setId(3);
Loginfo3.setLoginname("admin3");
list1.add(Loginfo1);
list1.add(Loginfo3);
List<Loginfo> list2 = new ArrayList<>();
Loginfo Loginfo2 = new Loginfo();
Loginfo2.setId(2);
Loginfo2.setLoginname("admin1");
Loginfo Loginfo4 = new Loginfo();
Loginfo4.setId(4);
Loginfo4.setLoginname("admin2");
list2.add(Loginfo2);
list2.add(Loginfo4);
//System.out.println(list1);
//System.out.println(list2);
List<Loginfo> list3 = new ArrayList<>();
for(int i=0;i<list2.size();i++){
Loginfo Loginfo = list2.get(i); //注意这里一定要重新声明变量
if(!list1.stream().filter(T -> T.getLoginname().equals(Loginfo.getLoginname())).findAny().isPresent()){
list3.add(list2.get(i)); //重复字段数据
System.out.println(list3);
list2.remove(i);
System.out.println(list2);
}
}
}
}
第二种 强烈推荐使用
/**
* @方法描述:获取两个ArrayList的差集
* @param firstArrayList 第一个ArrayList
* @param secondArrayList 第二个ArrayList
* @return resultList 差集ArrayList
*/
public static List<IncomeInvResponse> receiveDefectList(List<User> firstArrayList,
List<QywxUser> secondArrayList) {
List<QywxUser> resultList = firstArrayList.stream()
.filter(item -> !secondArrayList.stream().map(e -> e.getLoginname() + "|" + e.getUserName())
.collect(Collectors.toList()).contains(item.getUserid() + "|" + item.getName()))
.collect(Collectors.toList());
return resultList;
}
2、Java List.contains()方法:判断列表中是否包含指定元素
Java 集合类中的 List.contains() 方法用于判断列表中是否包含指定元素。如果列表中包含指定元素,则返回 true,否则返回 false。
语法:contains(Object o)
参数说明:
o:要判断是否存在于列表中的元素。
public static void main(String[] args){
List<String>list = new ArrayList<String>();
list.add("aa"); //向列表中添加数据
list.add("bb"); //向列表中添加数据
list.add("cc"); //向列表中添加数据
for(int i=0;i<list.size();i++){ //通过循环输出列表中的内容
System.out.println(i+":"+list.get(i));
}
String o = "dd";
System.out.println("list对象中是否包含元素"+o+":"+list.contains(o)); //判断字符串中是否包含指定字符串对象
}
3、list分页subSize
int subSize = 10;
int subCount = jsonRootBeanList.size();
int subPageTotal = (subCount / subSize) + ((subCount % subSize > 0) ? 1 : 0);
// 根据页码取数据
for (int i = 0, len = subPageTotal - 1; i <= len; i++) {
// 分页计算
int fromIndex = i * subSize;
int toIndex = ((i == len) ? subCount : ((i + 1) * subSize));
List<JsonRootBean> jsonRootBeanList3 = jsonRootBeanList.subList(fromIndex, toIndex);
System.out.println("jsonRootBeanList3:"+jsonRootBeanList3);
}