मैं जावा 8 स्ट्रीम का उपयोग करके एकाधिक शर्तों के आधार पर सूची से अलग तत्व कैसे प्राप्त कर सकता हूं?

उदाहरण के लिए - मान लें कि एक वस्तु Person :

class Person {
    Integer id;
    String name;
}

मैं id और name के अनूठे संयोजन वाली एक सूची बनाना चाहता हूं।
सूची में एक ही आईडी और नाम के साथ कई रिकॉर्ड हो सकते हैं

8
seasagar 9 जिंदा 2018, 12:53

4 जवाब

अपनी कक्षा के लिए hashCode() और equals() विधियों को ओवरराइड करें, फिर आप कुछ इस तरह कर सकते हैं:

Set<Person> result = persons.stream().collect(Collectors.toSet());

सेट एक डेटा संरचना है जो डुप्लिकेट की अनुमति नहीं देती है, इसलिए आपके पास केवल अद्वितीय तत्व होंगे।

यहाँ एक समाधान है: https://ideone.com/e.js/G7T2rH

2
мајдејсаремех 9 जिंदा 2018, 13:20

मुझे यकीन नहीं है कि आप वास्तव में क्या खोज रहे हैं, लेकिन मुझे कुछ समय पहले इसी तरह की समस्या मिली थी, क्या इससे थोड़ी मदद मिल सकती है।

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());

}

}
0
Dominik Wolf 9 जिंदा 2018, 13:13

मापदंड से मेल खाने वाले तत्वों को प्राप्त करने के लिए आप पहले अपनी सूची को फ़िल्टर कर सकते हैं और फिर अलग का उपयोग कर सकते हैं।

List<element> getDistinctForCrit(Filter<element> pred) {
 //assuming list is already available in this class
 return list.stream().filter(pred).distinct().collect(Collectors.toList())
}

आप इस फ़ंक्शन के लिए अपना फ़िल्टर मानदंड पास कर सकते हैं और फिर विशिष्ट आपके लिए अद्वितीय मान प्राप्त करेंगे।

distinct() लेता है वस्तु तुलना के आधार पर अलग मूल्य पैदा करता है।

इसलिए आपको कक्षा के अपने बराबर () पद्धति में अपनी विशिष्टता का तर्क देना चाहिए

0
Amar Dev 9 जिंदा 2018, 18:55

विधि Stream.distinct() विधि है, जो अद्वितीय मानों की धारा लौटाती है (ऑब्जेक्ट के आधार पर। बराबर)

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#distinct--

-1
Bartosz Bilicki 9 जिंदा 2018, 13:10