java兩個list中儲存bean物件,找出其中某一屬性不同的元素
在java中運用List集合儲存物件,如果想找到兩個list中不同的部分,可以用ArrayList的contains方法,遍歷每一個物件,判斷是否是相等的,如下:
public static void getUncontain(List<String> list1, List<String> list2){
for(String str1 : list1){
if(!list2.contains(str1)){
// 打印出list2沒有b,d
System.out .println("ArrayList2裡沒有的是==>" + str1);
}
}
for(String str2 : list2){
if(!list1.contains(str2)){
// 打印出list1沒有f,g
System.out.println("ArrayList1裡沒有的是==>" + str2);
}
}
}
但是List中儲存的是java中定義的bean物件呢?
如:
public class person {
private int id;
private String name;
public person(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
此時如果還用contains方法判斷由於是物件,每一次都不相同。
那該怎麼篩選出兩個list中不同的部分呢?
- 1.這個方法比較笨,但是也是最容易想到的,就是用一個新的list,來記錄兩個list之間相同的地方,然後每個list將相同的部分去掉:
private static void getDifferentPart1(List<person> l1, List<person> l2) {
List<person> newList=new ArrayList<>();
List<person> diffeList=new ArrayList<>();
for(person a : l1){
for(person b:l2){
if(b.getName().equals(a.getName())){
newList.add(a);//儲存相同的部分。
}
}
}
for(person a:l2){
int flag=0;
for (person person : newList) {
if(person.getName().equals(a.getName())){
flag=1;//相同的部分
}
}
if(flag==0){
diffeList.add(a);
}
}
for (person person : diffeList) {
System.out.println("diffeList:"+person.toString());
}
}
- 2.第二種方法新手不容易想到,就是重寫bean裡面的equals方法:
public class person {
private int id;
private String name;
public person(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+","+"name:"+name+" ";
}
@Override
public boolean equals(Object obj) {
if(name.equals(((person)obj).getName()))
return true;//這裡以name為判定標準。
else {
return false;
}
}
}
然後此時就可以用contains去比較物件:
private static void getDifferentPart2(List<person> l1, List<person> l2) {
for(person a : l1){
if(l2.contains(a)){
System.out.println("ok!!!");
}
}
}
其實你看contains方法原始碼的話,會發現它底層就是用equals方法實現的,
contains方法中直接呼叫indexOf方法,indexOf方法中採用equals方法判斷
:
/**
* Returns <tt>true</tt> if this list contains the specified element.
* More formally, returns <tt>true</tt> if and only if this list contains
* at least one element <tt>e</tt> such that
* <tt>(o==null ? e==null : o.equals(e))</tt>.
*
* @param o element whose presence in this list is to be tested
* @return <tt>true</tt> if this list contains the specified element
*/
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
/**
* Returns the index of the first occurrence of the specified element
* in this list, or -1 if this list does not contain the element.
* More formally, returns the lowest index <tt>i</tt> such that
* <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
* or -1 if there is no such index.
*/
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
相關推薦
java兩個list中儲存bean物件,找出其中某一屬性不同的元素
在java中運用List集合儲存物件,如果想找到兩個list中不同的部分,可以用ArrayList的contains方法,遍歷每一個物件,判斷是否是相等的,如下: public stati
找出list中的不同元素、刪除兩個list中相同的物件
package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * *
java對List去重並排序、如何快速地去掉兩個List中相同的部分
1:去重並排序 package twolist; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Has
java兩個List的交集,並集,差異集
public static void main(String[] args) { List list1 =new ArrayList(); list1.add("1111"); list1.add("2222"); list1.add("3333"); lis
時間殺手—for迴圈—如何找出兩個list中的相同元素
import numpy import datetime a = numpy.random.randint( 5,1000,100000 ) b = numpy.random startt1 = datetime.datetime.now() l11 = sorted(list(set(a)))
Java 兩個list資料根據某個欄位合併
之前遇到一個需求,欄位是每小時那種(2018101208)。然後服務給我資料少了部分。然後我需要自已推算。然後補上沒有那些小時為單位的資料。這裡面也涉及到了自已設計出來資料list是全面的。所有的小時都有。然後把伺服器獲取list根據這個進行對比,補上伺服器沒有的小時數。兩個
兩個list合併為列表物件
為了將兩個list資料對應起來方便前端進行處理。 需求:第一個圖片對應於第一個視訊作為視訊的封面。 兩個陣列:List< String > imgList, List< String > videoList 視訊多於圖片時不返回視訊 由於前期資料結構設
高效比較兩個list中不同的元素
為知具體出處,望作者見諒!! package com.syl.test; import java.util.*; /** * 獲取兩個List的不同元素(假設List自身不存在重複元素) * Created by syl on 2017/12/26 0026. *
高效篩選兩個List中的不同的元素
問題記錄: 開發過程中,需要把兩個List中不同的元素篩選出來,這兩個List的資料量都很大,如果按照一般的方法,分別去遍歷兩個List,然後分別對每一個元素做比較,時間消耗將會達到m*n,處理效率顯
java 兩個list 交集 並集 差集 去重複並集
List<String> list1 =new ArrayList<String>();list1.add("A");list1.add("B);List<String&
java 兩個list的交併集快速算
List<String> list1 =new ArrayList<String>();list1.add("A");list1.add("B);List<String> list2 =new ArrayList<String>
JAVA工具類學習-java 兩個list 交集 並集 差集 去重複並集
List<String> list1 =new ArrayList<String>();list1.add("A");list1.add("B);List<String> list2 =new ArrayList<String>
1點兒優化:比較兩個List中是否有相同的String
一般寫法(雙層for迴圈+if語句)複雜 for(int i = 0; i < list2.size(); i++){ for(int j = 0; j < list3.siz
找出兩個字串中相同的詞語,返回一個分值
前言: 由於筆者工作的需求,給定一個字串,需要從一堆字串中找出與其最相似的字串,網路的一些演算法發現跟自己的需求不匹配,於是自己寫了一個,話不多說,請看下文。 目標: 給定兩個字串,能將兩個字串中相同詞語的相似度返回一個分值。 計分方式: 分值跟次數的個數有關,具體
Ext兩個jsp頁面共享設定物件,屬性
父頁面 js 設定一個物件 var role_tree = {globle_role:'all'}; 子頁面可以通過用 parent 關鍵字 設定 'click':function(nod
給定兩個字符串數組,求出二者不同的元素
color void integer contain 遍歷 如果 nta 字符 style 題目描述:給定s = {"a","b","c","d","f","e","ab"}; s2 = {"a","ab"}; 求出s中不包含s2中的剩余元素。可以認為是 s-s2的結果。
136 Single Number 數組中除一個數外其他數都出現兩次,找出只出現一次的數
時間 body 算法 一次 整數 除了 給定一個整數數組 pub leetcode 給定一個整數數組,除了某個元素外其余元素均出現兩次。請找出這個只出現一次的元素。備註:你的算法應該是一個線性時間復雜度。 你可以不用額外空間來實現它嗎? 詳見:https://leetcod
Java演算法給定一個整數陣列,找出其中兩個數相加等於目標值
給定一個整數陣列,找出其中兩個數相加等於目標值 例如:給定陣列及目標值 nums = [2,7,11,15] ,target = 9 因為nums[0] + nums[1] = 2 + 7 = 9 返回[0,1] /** * 使用輔助空間(使用雜湊表
C中程式設計實現,一個數組中只有兩個數不是成對出現,找出這兩個數
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void Find(int *arr, int sz, int *p1, int *p2) { int num = 0; int i
輸入兩個整數值n和m,求出整數1到n之間的和為m的所有組合
/** * java實現,參考寫的 */ import java.util.ArrayList; import java.util.Scanner; public class Lx{ public static void main(String[] args) {