Ikkita xususiyat moslamasi java bilan bir xil yoki yo'qligini tekshirish mumkinmi?

I've two properties, property1 and property2

 Properties properties1 = new Properties();
 Properties properties2 = new Properties();

 properties1.put("A", "Apple");
 properties1.put("B", "Ball");

 properties2.put("A", "Apple");
 properties2.put("C", "Cat");

How can we check whether the key in properties1 overlaps on key in properties2

2
Agar qiymatlar boshqacha bo'lsa, siz kalitlarni bir-biriga ulashdan manfaatdormisiz? Masalan, properties2.put ("A", "Armut") o'rniga foydalanasiz.
qo'shib qo'ydi muallif Lii, manba

6 javoblar

Properties derives from HashTable, so from Map too.

Agar xaritada bo'lgani kabi, barcha yozuvlarni yinelemek uchun properties1.entrySet() Keyin har bir kirish uchun properties2 tarkibida mavjudligini tekshirib ko'rishingiz mumkin, agar sizda kalit mavjud bo'lsa, oldin tekshiriladi va agar mavjud bo'lsa, siz qiymatlarni taqqoslashingiz mumkin:

    for (Entry entry : properties1.entrySet()) {
        Object currentKey = entry.getKey();
        boolean isContained = properties2.containsKey(currentKey);
        if (isContained && entry.getValue().equals(properties2.get(currentKey))) {
            System.out.println("property equals for " + entry);
        }
    }
2
qo'shib qo'ydi
qadriyatlar bir xil bo'lsa, tekshirish kerak. Keyin ular «chinakam» bir-biriga o'xshamaydi
qo'shib qo'ydi muallif Tschallacka, manba
xop. Faqat .equals() uchun == ni o'zgartiring. Satrlari mos kelmaydi, chunki ular mag'lubiyatga uchragan havuzdan olinmaydi, ammo o'qish satrlari bilan yaratiladi.
qo'shib qo'ydi muallif Tschallacka, manba
To'g'ri, lekin mening fikrimcha, faqat kalitlar emas, balki qadriyatlar ham bir-biriga zid. Bu jumboqga o'xshaydi. Va bir narsa shubhali bo'lsa, men eng qat'iy xilma-xillikka intilishga harakat qilaman. Va shunga o'xshash: bir-biriga yopish = key match + value match. aks holda u bir-biriga o'xshashlik emas, balki qiymat ziddiyatidir.
qo'shib qo'ydi muallif Tschallacka, manba
OK men yangilayman
qo'shib qo'ydi muallif davidxxx, manba
Yangilandi ...
qo'shib qo'ydi muallif davidxxx, manba
@Tschallacka Lekin menimcha, bu savolga aniq javob berilmaydi: "Xususiyatlardagi kalit1 properties2 kalitiga mos keladimi-yo'qligini tekshirish mumkin". Bu qiymatlarni nazarda tutmaydi.
qo'shib qo'ydi muallif davidxxx, manba

Ham mulk nomlari majmuasining kesishmasini qidirib, keyin qanday qiymatlarni farqlashini tekshirishingiz mumkin:

Set names1 = properties1.stringPropertyNames();
Set names2 = properties2.stringPropertyNames();
names1.retainAll(names2);//after this line, names1 contains only common elements

// let's see which elements have different values
for(String str : names1){
    if(!properties1.getProperty(str).equals(properties2.getProperty(str))){
        System.out.println("Property "+str+" overlapping");
    }
}
2
qo'shib qo'ydi

Properties extends Hashtable, so you can find the keys present in both objects using set intersection:

Set intersection = new HashSet(properties1.keySet()).retainAll(properties2.keySet());
if(intersection.isEmpty()) {
    //no overlap
}
1
qo'shib qo'ydi

Ikki Xususiyatlar moslamalarni kirish guruhlari o'rtasidagi kesishingiz mumkin:

Set> intersection = new HashSet<>(properties1.entrySet());
intersection.retainAll(properties2.entrySet());

intersection will contain the common properties, with both key name and value.

1
qo'shib qo'ydi

Misol uchun, Java 8 bilan:

   //Returns overlapping entries (K, V)
    properties1.entrySet()
               .stream()
               .filter(entry -> entry.getValue().equals(properties2.get(entry.getKey())))
               .collect(Collectors.toList())
    );
1
qo'shib qo'ydi

Siz barcha yozuvlarni yineleyebilirsiniz ( entrySet() usulini ishlating) va boshqa xususiyatlar mavjudligini tekshiring.

boolean overlapped = properties1.entrySet()
                                .stream()
                                .allMatch(e -> properties2.containsKey(e.getKey()) && 
                                     properties2.get(e.getKey()).equals(e.getValue()));
0
qo'shib qo'ydi
Siz chindan ham cheklangan xususiyatlar majmui bilan (100) aytamizki, oqimning yuqori qismi bunga loyiqmi? Oqimlar odatda faqat 10.000dan oshib ketadi
qo'shib qo'ydi muallif Tschallacka, manba
Ha. Albatta. Ushbu echim, shuningdek, okunabilirlik uchun ham yordam beradi.
qo'shib qo'ydi muallif freedev, manba
@defaultlocale o'ng, taklifingiz uchun tashakkur.
qo'shib qo'ydi muallif freedev, manba
Agar boshqa savol bilan javob bersam, iltimos, uzr so'rayman, lekin agar bitta to'plam boshqasiga to'g'ri keladigan bo'lsa, unda boshqasi ham mavjudmi?
qo'shib qo'ydi muallif freedev, manba
Xo'sh, bu holatda "o'zaro bog'langan" mutlaqo bir xil ma'noga ega?
qo'shib qo'ydi muallif default locale, manba
Buni aytishim mumkinki, bu usul e.getKey() kodini properties2 e.getValue() ga mos kelishini tekshirmaydi >.
qo'shib qo'ydi muallif default locale, manba
allMatch kodi properties2 tarkibida properties1 kodlari mavjudligini tekshiradi,
qo'shib qo'ydi muallif default locale, manba