Java根據list中對象的屬性找出list重複數據或去除list重複數據

在實際開發中,常常會遇到須要找出(刪除)一個list中某些元素的屬性相同的元素,或者兩個list中某些元素的屬性相等的元素,這種方法不少,這裏整理列出一些: 廢話不說,上代碼,有註釋掉的大家本身看java

import java.util.ArrayList;ide

import java.util.HashMap;this

import java.util.List;spa

import java.util.Map;code

public class Test {cdn

public static void main(String[] args) {
	List<Student> testList = new ArrayList<Student>();
	testList.add(new Student("張一"));
	testList.add(new Student("張二"));
	testList.add(new Student("張三"));
	testList.add(new Student("老王"));
	testList.add(new Student("張四"));
	testList.add(new Student("張五"));
	testList.add(new Student("張六"));
	testList.add(new Student("張七"));
	testList.add(new Student("老王"));
	testList.add(new Student("張八"));
	testList.add(new Student("張九"));
	testList.add(new Student("老王"));

	List<Student> repeatList = new ArrayList<Student>();//用於存放重複的元素的list

	// 以一種方法:兩個循環(最蠢的方法)
	for (int i = 0; i < testList.size() - 1; i++) {
		for (int j = testList.size() - 1; j > i; j--) {
			if (testList.get(j).getStuName().equals(testList.get(i).getStuName())) {
				repeatList.add(testList.get(j));//把相同元素加入list(找出相同的)
	
				testList.remove(j);//刪除重複元素
			}
		}
	}
複製代碼

// for(Student s : repeatList){ // System.out.println("相同的元素:" + s.getStuName()); // }blog

//第二種方法:利用map.containsKey()
	Map<String, Integer> map = new HashMap<>(); 
	for(Student s : testList){
		//1:map.containsKey()   檢測key是否重複
		if(map.containsKey(s.getStuName())){
			repeatList.add(s);//獲取重複的學生名稱
			
			Integer num = map.get(s.getStuName());
			map.put(s.getStuName(), num+1);
		}else{
			map.put(s.getStuName(), 1);
		}
		//2: 這個key是否是存在對應的value(key是否在map中)
複製代碼

// Integer count = map.get(s.getStuName());//這種寫法也能夠,殊途同歸開發

// if (count == null) {rem

// map.put(s.getStuName(), 1);get

// } else {

// map.put(s.getStuName(), (count + 1)); // } } // for(Student s : repeatList){

// System.out.println("相同的元素:" + s.getStuName());

// }

// for(Map.Entry<String, Integer> entry : map.entrySet()){

// System.out.println("學生:" + entry.getKey() + "的名字出現了:" + entry.getValue() + "次");

// }

//第三種方法:contains()方法  這個我的認爲有必定的侷限性,我的理解哈
    List<Integer> repeatList1 = new ArrayList<>();  
    List<Integer> list = new ArrayList<>();  
    list.add(1);
    list.add(2);
    list.add(1);
    list.add(3);
    list.add(4);
    list.add(1);
    list.add(5);
    for(int i=0;i<list.size();i++){  
        if(!repeatList1.contains(list.get(i))){  
        	repeatList1.add(list.get(i));  
        }  
    } 
    for(Integer s : repeatList1){
		System.out.println(s);
	}
}
複製代碼

}

Student類: public class Student {

public Student(String stuName){
	this.stuName = stuName;
}

private String 	stuName;

public String getStuName() {
	return stuName;
}

public void setStuName(String stuName) {
	this.stuName = stuName;
}
複製代碼

}

這個是java8的stream,因爲我用的仍是jdk7 這裏就找了一個 給大家當例子看,有興趣能夠看stream相關的知識,很強大的功能

List list = Arrays.asList("123", "1234", "12345", "123456", "1234567", "122222223", "123", "1234", "2422"); Map<String, Long> collect = list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); System.out.println(collect);

就列出這麼幾種,應該夠用了!!!

喜歡的話能夠關注下!!! 天天更新!!!

也能夠加個人Java進階羣:5 2 9 7 2 2 4 0 6

相關文章
相關標籤/搜索