मैं के साथ वस्तुओं की एक सूची है, जिनमें कई दोहराया और कुछ क्षेत्रों की जरूरत है जिन्हें मर्ज करने की। मैं इसे केवल जावा 8 स्ट्रीम का उपयोग करके अद्वितीय वस्तुओं की सूची में कम करना चाहता हूं (मुझे पता है कि पुराने-स्कूल माध्यमों के माध्यम से इसे कैसे करना है, लेकिन यह एक प्रयोग है।)समूह और कम वस्तुओं की सूची
यह मेरे पास अभी है। मैं वास्तव में यह पसंद नहीं है क्योंकि नक्शा निर्माण बाहरी लगता है और मूल्यों() संग्रह समर्थन नक्शा के एक दृश्य है, और आप एक नया ArrayList<>(...)
में लपेट के लिए एक अधिक विशिष्ट संग्रह प्राप्त करने की आवश्यकता है। क्या कोई बेहतर दृष्टिकोण है, शायद अधिक सामान्य कमी संचालन का उपयोग कर?
@Test
public void reduce() {
Collection<Foo> foos = Stream.of("foo", "bar", "baz")
.flatMap(this::getfoos)
.collect(Collectors.toMap(f -> f.name, f -> f, (l, r) -> {
l.ids.addAll(r.ids);
return l;
})).values();
assertEquals(3, foos.size());
foos.forEach(f -> assertEquals(10, f.ids.size()));
}
private Stream<Foo> getfoos(String n) {
return IntStream.range(0,10).mapToObj(i -> new Foo(n, i));
}
public static class Foo {
private String name;
private List<Integer> ids = new ArrayList<>();
public Foo(String n, int i) {
name = n;
ids.add(i);
}
}
क्या मध्यवर्ती मानचित्र का उपयोग किए बिना इस "पुरानी स्कूल" (पारंपरिक रूप से, लैम्ब्डा/धाराओं के बिना) को कार्यान्वित करना संभव है? मुझे लगता है कि चूंकि डुप्लीकेट संभावित रूप से इनपुट में कहीं भी हो सकते हैं, इसलिए सभी को तब तक बफर किया जाना चाहिए जब तक कि सभी इनपुट संसाधित नहीं हो जाते। –