عمليات مجموعة الكلاسيكية لjava.util.Collection
-
03-07-2019 - |
سؤال
هل هناك أي وظيفة المدمج في لعمليات مجموعة الكلاسيكية على الطبقة java.util.Collection؟ ومن شأن التنفيذ بلدي معين يكون لArrayList، ولكن هذا يبدو وكأنه شيء التي ينبغي تطبيقها لجميع الفئات الفرعية للمجموعة. أنا أبحث عن شيء مثل:
ArrayList<Integer> setA ...
ArrayList<Integer> setB ...
ArrayList<Integer> setAintersectionB = setA.intersection(setB);
ArrayList<Integer> setAminusB = setA.subtract(setB);
وبعد بعض البحث، وكنت قادرا على إيجاد حلول نابعة من الداخل فقط. أيضا، وأنا أدرك أنني يمكن الخلط بين فكرة "مجموعة" مع فكرة وجود "مجموعة"، وعدم السماح والسماح التكرارات على التوالي. ربما هذا هو وظيفة عادلة حقا للواجهة مجموعة؟
في حالة أن لا أحد يعرف من أي وظيفة مدمجة، وربما يمكن أن نستخدم هذه كمستودع للجافا ممارسة كود تشغيل مجموعة قياسية؟ أتصور هذه العجلة تم اختراع عدة مرات.
المحلول
ويتم تقاطع مع Collection.retainAll
. الطرح مع Collection.removeAll
. الاتحاد مع Collection.addAll
. في كل حالة، كما Set
سوف تتصرف مثل مجموعة وسوف List
تتصرف مثل قائمة.
وأما الأشياء قابلة للتغيير، إلا أنها تعمل في المكان. سوف تحتاج إلى نسخ صراحة إذا كنت ترغب في الاحتفاظ الكائن قابلة للتغيير الأصلي unmutated.
نصائح أخرى
وأوصي جوجل الجوافة . و مجموعات و> يبدو فئة لديك بالضبط ما كنت أبحث عنه. أنه يحتوي على <لأ href = "https://google.github.io/guava/releases/snapshot-jre/api/docs/com/google/common/collect/Sets.html#intersection-java.util.Set- java.util.Set- "يختلط =" نوفولو noreferrer "> تقاطع طريقة و<لأ href =" https://google.github.io/guava/releases/snapshot-jre/api/docs/com /google/common/collect/Sets.html#difference-java.util.Set-java.util.Set- "يختلط =" نوفولو noreferrer "> الفرق الأسلوب.
هذا العرض وربما شيء كنت ترغب في مشاهدة إذا كنت مهتما. وهو يشير إلى مجموعات جوجل، والذي كان اسمه الأصلي الجوافة و.
هل تبحث عن java.util.Set اجهة (وHashSet تطبيقات وTreeSet (مرتبة)) منتديات وتعرف واجهة removeAll (مجموعة ج) الذي يبدو وكأنه substract ()، وretainAll (مجموعة ج) الذي يشبه التقاطع.
لعمليات قابلة للتغيير رؤية الإجابة المقبولة.
للحصول على البديل imutable يمكنك القيام بذلك مع جافا 8
والطرح
set1
.stream()
.filter(item-> !set2.contains(item))
.collect(Collectors.toSet())
وتقاطع
set1
.stream()
.filter(item-> set2.contains(item))
.collect(Collectors.toSet())