मैं जावा 8 स्ट्रीम का उपयोग करके एकाधिक शर्तों के आधार पर सूची से अलग तत्व कैसे प्राप्त कर सकता हूं?
उदाहरण के लिए - मान लें कि एक वस्तु Person
:
class Person {
Integer id;
String name;
}
मैं id
और name
के अनूठे संयोजन वाली एक सूची बनाना चाहता हूं।
सूची में एक ही आईडी और नाम के साथ कई रिकॉर्ड हो सकते हैं
4 जवाब
अपनी कक्षा के लिए hashCode()
और equals()
विधियों को ओवरराइड करें, फिर आप कुछ इस तरह कर सकते हैं:
Set<Person> result = persons.stream().collect(Collectors.toSet());
सेट एक डेटा संरचना है जो डुप्लिकेट की अनुमति नहीं देती है, इसलिए आपके पास केवल अद्वितीय तत्व होंगे।
यहाँ एक समाधान है: https://ideone.com/e.js/G7T2rH
मुझे यकीन नहीं है कि आप वास्तव में क्या खोज रहे हैं, लेकिन मुझे कुछ समय पहले इसी तरह की समस्या मिली थी, क्या इससे थोड़ी मदद मिल सकती है।
import java.util.ArrayList;
import java.util.List;
public class Person {
public int id;
public String name;
public static List<String> combinedIds;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public static String getCombinedUuid(Person person) {
return person.getName() + person.getId();
}
public static void main(String[] args) {
List<String> combinedIDs = new ArrayList<String>();
Person person = new Person(12345, "Doe");
String generatedUuid = getCombinedUuid(person);
combinedIDs.add(generatedUuid);
System.out.println(combinedIDs.get(0).toString());
}
}
मापदंड से मेल खाने वाले तत्वों को प्राप्त करने के लिए आप पहले अपनी सूची को फ़िल्टर कर सकते हैं और फिर अलग का उपयोग कर सकते हैं।
List<element> getDistinctForCrit(Filter<element> pred) {
//assuming list is already available in this class
return list.stream().filter(pred).distinct().collect(Collectors.toList())
}
आप इस फ़ंक्शन के लिए अपना फ़िल्टर मानदंड पास कर सकते हैं और फिर विशिष्ट आपके लिए अद्वितीय मान प्राप्त करेंगे।
distinct()
लेता है वस्तु तुलना के आधार पर अलग मूल्य पैदा करता है।
इसलिए आपको कक्षा के अपने बराबर () पद्धति में अपनी विशिष्टता का तर्क देना चाहिए
विधि Stream.distinct()
विधि है, जो अद्वितीय मानों की धारा लौटाती है (ऑब्जेक्ट के आधार पर। बराबर)
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#distinct--
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।