คอลเลกชัน Apache Commons - คู่มือฉบับย่อ

Commons Collections เพิ่ม Java Collections Framework มีคุณสมบัติหลายประการเพื่อให้การจัดการคอลเลกชันเป็นเรื่องง่าย มีอินเทอร์เฟซการใช้งานและยูทิลิตี้ใหม่ ๆ มากมาย

คุณสมบัติหลักของ Commons Collections มีดังนี้ -

  • Bag - อินเทอร์เฟซกระเป๋าช่วยลดความซับซ้อนของคอลเลกชันซึ่งมีสำเนาหลายชุดของแต่ละวัตถุ

  • BidiMap - อินเทอร์เฟซ BidiMap มีแผนที่แบบสองทิศทางซึ่งสามารถใช้เพื่อค้นหาค่าโดยใช้คีย์หรือคีย์โดยใช้ค่า

  • MapIterator - อินเทอร์เฟซ MapIterator ให้การทำซ้ำบนแผนที่ที่ง่ายและสะดวก

  • Transforming Decorators - นักตกแต่งที่เปลี่ยนรูปแบบสามารถปรับเปลี่ยนทุกวัตถุของคอลเลกชันได้เช่นเดียวกับเมื่อมีการเพิ่มเข้าไปในคอลเลกชัน

  • Composite Collections - มีการใช้คอลเลกชันคอมโพสิตซึ่งจำเป็นต้องจัดการหลายคอลเลกชันอย่างสม่ำเสมอ

  • Ordered Map - แผนที่ที่สั่งซื้อจะคงลำดับไว้ซึ่งองค์ประกอบต่างๆจะถูกเพิ่มเข้ามา

  • Ordered Set - ชุดที่สั่งซื้อจะคงลำดับไว้ซึ่งองค์ประกอบต่างๆจะถูกเพิ่มเข้ามา

  • Reference map - แผนที่อ้างอิงช่วยให้สามารถรวบรวมคีย์ / ค่าได้ภายใต้การควบคุมอย่างใกล้ชิด

  • Comparator implementations - มีการใช้งานตัวเปรียบเทียบมากมาย

  • Iterator implementations - มีการใช้งาน Iterator มากมาย

  • Adapter Classes - คลาสอะแดปเตอร์มีไว้เพื่อแปลงอาร์เรย์และการแจงนับเป็นคอลเลกชัน

  • Utilities- ยูทิลิตี้มีไว้เพื่อทดสอบหรือสร้างคุณสมบัติทฤษฎีเซตทั่วไปของคอลเลกชันเช่นยูเนี่ยนจุดตัด รองรับการปิด

การตั้งค่าสภาพแวดล้อมท้องถิ่น

หากคุณยังคงเต็มใจที่จะตั้งค่าสภาพแวดล้อมของคุณสำหรับภาษาการเขียนโปรแกรม Java ส่วนนี้จะแนะนำคุณเกี่ยวกับวิธีดาวน์โหลดและตั้งค่า Java บนเครื่องของคุณ โปรดปฏิบัติตามขั้นตอนด้านล่างเพื่อตั้งค่าสภาพแวดล้อม

Java SE สามารถใช้ได้อย่างอิสระจากลิงค์ https://www.oracle.com/technetwork/java/archive-139210.html ดังนั้นคุณดาวน์โหลดเวอร์ชันที่อิงตามระบบปฏิบัติการของคุณ

ทำตามคำแนะนำเพื่อดาวน์โหลด Java และเรียกใช้. exe เพื่อติดตั้ง Java บนเครื่องของคุณ เมื่อคุณติดตั้ง Java บนเครื่องของคุณแล้วคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมให้ชี้ไปที่ไดเร็กทอรีการติดตั้งที่ถูกต้อง

การตั้งค่า Path สำหรับ Windows 2000 / XP

เราสมมติว่าคุณได้ติดตั้ง Java ใน c:\Program Files\java\jdk directory

  • คลิกขวาที่ 'My Computer' และเลือก 'Properties'

  • คลิกที่ปุ่ม "ตัวแปรสภาพแวดล้อม" ใต้แท็บ "ขั้นสูง"

  • ตอนนี้เปลี่ยนตัวแปร 'Path' เพื่อให้มีพา ธ ไปยังไฟล์ปฏิบัติการ Java ตัวอย่างเช่นหากเส้นทางถูกตั้งค่าเป็น'C:\WINDOWS\SYSTEM32'จากนั้นเปลี่ยนเส้นทางของคุณเพื่ออ่าน 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

การตั้งค่าเส้นทางสำหรับ Windows 95/98 / ME

เราสมมติว่าคุณได้ติดตั้ง Java ใน c:\Program Files\java\jdk directory.

  • แก้ไขไฟล์ 'C: \ autoexec.bat' และเพิ่มบรรทัดต่อไปนี้ในตอนท้าย - 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'

การตั้งค่า Path สำหรับ Linux, UNIX, Solaris, FreeBSD

ควรตั้งค่า PATH ตัวแปรสภาพแวดล้อมให้ชี้ไปที่ตำแหน่งที่ติดตั้งไบนารีของ Java โปรดดูเอกสารประกอบเชลล์ของคุณหากคุณมีปัญหาในการดำเนินการนี้

ตัวอย่างเช่นถ้าคุณใช้ bash เป็นเชลล์ของคุณคุณจะต้องเพิ่มบรรทัดต่อไปนี้ต่อท้าย '.bashrc: export PATH=/path/to/java:$PATH'

บรรณาธิการ Java ยอดนิยม

ในการเขียนโปรแกรม Java คุณต้องมีโปรแกรมแก้ไขข้อความ มี IDE ที่ซับซ้อนมากมายในตลาด แต่ในตอนนี้คุณสามารถพิจารณาข้อใดข้อหนึ่งต่อไปนี้ -

  • Notepad - บนเครื่อง Windows คุณสามารถใช้โปรแกรมแก้ไขข้อความง่ายๆเช่น Notepad (แนะนำสำหรับบทช่วยสอนนี้), TextPad

  • Netbeans - เป็น Java IDE ที่เป็นโอเพ่นซอร์สและฟรีซึ่งสามารถดาวน์โหลดได้จาก https://netbeans.org.

  • Eclipse - นอกจากนี้ยังเป็น Java IDE ที่พัฒนาโดยชุมชนโอเพนซอร์ส eclipse และสามารถดาวน์โหลดได้จาก https://www.eclipse.org/.

ดาวน์โหลด Common Collections Archive

ดาวน์โหลดไฟล์ jar Apache Common Collections เวอร์ชันล่าสุดจาก commons-collections4-4.1-bin.zip ในขณะที่เขียนบทช่วยสอนนี้เราได้ดาวน์โหลดcommons-collections4-4.1-bin.zip และคัดลอกลงใน C:\>Apache folder.

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows commons-collections4-4.1-bin.zip
ลินุกซ์ commons-collections4-4.1-bin.tar.gz
Mac commons-collections4-4.1-bin.tar.gz

ตั้งค่าสภาพแวดล้อมคอลเลกชันทั่วไปของ Apache

ตั้งค่า APACHE_HOMEตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่งไดเร็กทอรีฐานที่จัดเก็บ Apache jar ไว้ในเครื่องของคุณ สมมติว่าเราได้แยก commons-collections4-4.1-bin.zip ในโฟลเดอร์ Apache บนระบบปฏิบัติการต่างๆดังนี้ -

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows ตั้งค่าตัวแปรสภาพแวดล้อม APACHE_HOME เป็น C: \ Apache
ลินุกซ์ ส่งออก APACHE_HOME = / usr / local / Apache
Mac ส่งออก APACHE_HOME = / Library / Apache

ตั้งค่าตัวแปร CLASSPATH

ตั้งค่า CLASSPATHตัวแปรสภาพแวดล้อมเพื่อชี้ไปยังตำแหน่ง jar ของคอลเลกชันทั่วไป สมมติว่าคุณเก็บ commons-collections4-4.1-bin.zip ไว้ในโฟลเดอร์ Apache บนระบบปฏิบัติการต่างๆดังนี้ -

ระบบปฏิบัติการ เอาต์พุต
Windows ตั้งค่าตัวแปรสภาพแวดล้อม CLASSPATH เป็น% CLASSPATH%;% APACHE_HOME% \ commons-collections4-4.1-bin.jar; .;
ลินุกซ์ ส่งออก CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-collections4-4.1-bin.jar:.
Mac ส่งออก CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-collections4-4.1-bin.jar:.

มีการเพิ่มอินเทอร์เฟซใหม่เพื่อรองรับกระเป๋า กระเป๋าเป็นตัวกำหนดคอลเลกชันซึ่งจะนับจำนวนครั้งที่วัตถุปรากฏในคอลเลกชัน ตัวอย่างเช่นถ้า Bag มี {a, a, b, c} ดังนั้น getCount ("a") จะส่งคืน 2 ในขณะที่ uniqueSet () ส่งคืนค่าที่ไม่ซ้ำกัน

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นการประกาศสำหรับอินเตอร์เฟส org.apache.commons.collections4.Bag <E> -

public interface Bag<E>
   extends Collection<E>

วิธีการ

วิธีการอนุมานกระเป๋ามีดังนี้ -

ซีเนียร์ วิธีการและคำอธิบาย
1

boolean add(E object)

(การละเมิด) เพิ่มหนึ่งสำเนาของวัตถุที่ระบุลงในกระเป๋า

2

boolean add(E object, int nCopies)

เพิ่มสำเนา nCopies ของวัตถุที่ระบุลงในกระเป๋า

3

boolean containsAll(Collection<?> coll)

(Violation) จะคืนค่าเป็นจริงหากกระเป๋ามีองค์ประกอบทั้งหมดในคอลเลกชั่นที่กำหนดโดยคำนึงถึงความสำคัญของหัวใจ

4

int getCount(Object object)

ส่งคืนจำนวนครั้งที่เกิดขึ้น (จำนวนนับ) ของวัตถุที่ระบุที่อยู่ในกระเป๋า

5

Iterator<E> iterator()

ส่งคืน Iterator ในชุดสมาชิกทั้งหมดรวมถึงสำเนาที่เกิดจากจำนวนสมาชิก

6

boolean remove(Object object)

(การละเมิด) นำสิ่งที่เกิดขึ้นทั้งหมดออกจากกระเป๋า

7

boolean remove(Object object, int nCopies)

ลบสำเนา nCopies ของวัตถุที่ระบุออกจากกระเป๋า

8

boolean removeAll(Collection<?> coll)

(การละเมิด) ลบองค์ประกอบทั้งหมดที่แสดงในคอลเลกชันที่กำหนดโดยคำนึงถึงความสำคัญของหัวใจ

9

boolean retainAll(Collection<?> coll)

(การละเมิด) นำสมาชิกในกระเป๋าที่ไม่ได้อยู่ในคอลเลกชั่นที่กำหนดออกโดยเคารพต่อความสำคัญของหัวใจ

10

int size()

ส่งคืนจำนวนสินค้าทั้งหมดในกระเป๋าจากทุกประเภท

11

Set<E> uniqueSet()

ส่งคืนชุดขององค์ประกอบเฉพาะในกระเป๋า

วิธีการสืบทอด

อินเทอร์เฟซนี้สืบทอดวิธีการจากอินเทอร์เฟซต่อไปนี้ -

  • java.util.Collection

ตัวอย่าง Bag Interface

ตัวอย่างของ BagTester.java มีดังนี้ -

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagTester {
   public static void main(String[] args) {
      Bag<String> bag = new HashBag<>();
      //add "a" two times to the bag.
      bag.add("a" , 2);
      //add "b" one time to the bag.
      bag.add("b");
      //add "c" one time to the bag.
      bag.add("c");
      //add "d" three times to the bag.
      bag.add("d",3
      //get the count of "d" present in bag.
      System.out.println("d is present " + bag.getCount("d") + " times.");
      System.out.println("bag: " +bag);
      //get the set of unique values from the bag
      System.out.println("Unique Set: " +bag.uniqueSet());
      //remove 2 occurrences of "d" from the bag
      bag.remove("d",2);
      System.out.println("2 occurences of d removed from bag: " +bag);
      System.out.println("d is present " + bag.getCount("d") + " times.");
      System.out.println("bag: " +bag);
      System.out.println("Unique Set: " +bag.uniqueSet());
   }
}

เอาต์พุต

คุณจะเห็นผลลัพธ์ต่อไปนี้ -

d is present 3 times.
bag: [2:a,1:b,1:c,3:d]
Unique Set: [a, b, c, d]
2 occurences of d removed from bag: [2:a,1:b,1:c,1:d]
d is present 1 times.
bag: [2:a,1:b,1:c,1:d]
Unique Set: [a, b, c, d]

เพิ่มอินเทอร์เฟซใหม่เพื่อรองรับแผนที่แบบสองทิศทาง การใช้แผนที่แบบสองทิศทางสามารถค้นหาคีย์โดยใช้ค่าและค่าสามารถค้นหาโดยใช้คีย์ได้อย่างง่ายดาย

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นคำประกาศสำหรับ org.apache.commons.collections4.BidiMap<K,V> อินเตอร์เฟซ -

public interface BidiMap<K,V>
   extends IterableMap<K,V>

วิธีการ

วิธีการสำหรับ BidiMap Interface มีดังต่อไปนี้ -

ซีเนียร์ วิธีการและคำอธิบาย
1

K getKey(Object value)

รับคีย์ที่แมปกับค่าที่ระบุในปัจจุบัน

2

BidiMap<V,K> inverseBidiMap()

รับมุมมองของแผนที่นี้ซึ่งมีการย้อนกลับของคีย์และค่า

3

V put(K key, V value)

วางคู่คีย์ - ค่าลงในแผนที่แทนที่คู่ก่อนหน้า

4

K removeValue(Object value)

ลบคู่คีย์ - ค่าที่แมปกับค่าที่ระบุในปัจจุบัน (การดำเนินการที่เป็นทางเลือก)

5

Set<V> values()

ส่งคืนมุมมองชุดของค่าที่มีอยู่ในแผนที่นี้

วิธีการสืบทอด

อินเทอร์เฟซนี้สืบทอดวิธีการจากอินเทอร์เฟซต่อไปนี้ -

  • org.apache.commons.collections4.Get

  • org.apache.commons.collections4.IterableGet

  • org.apache.commons.collections4.Put

  • java.util.Map

ตัวอย่างของ BidiMap Interface

ตัวอย่างของ BidiMapTester.java มีดังนี้ -

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.TreeBidiMap;
public class BidiMapTester {
   public static void main(String[] args) {
      BidiMap<String, String> bidi = new TreeBidiMap<>();
      bidi.put("One", "1");
      bidi.put("Two", "2");
      bidi.put("Three", "3");
      System.out.println(bidi.get("One"));
      System.out.println(bidi.getKey("1"));
      System.out.println("Original Map: " + bidi);
      bidi.removeValue("1");
      System.out.println("Modified Map: " + bidi);
      BidiMap<String, String> inversedMap = bidi.inverseBidiMap();
      System.out.println("Inversed Map: " + inversedMap);
   }
}

เอาต์พุต

เมื่อคุณเรียกใช้รหัสคุณจะเห็นผลลัพธ์ต่อไปนี้ -

1
One
Original Map: {One=1, Three=3, Two=2}
Modified Map: {Three=3, Two=2}
Inversed Map: {2=Two, 3=Three}

อินเทอร์เฟซ JDK Map นั้นค่อนข้างยากที่จะทำซ้ำเนื่องจากการทำซ้ำจะทำได้บน EntrySet หรือบนวัตถุ KeySet MapIterator ให้การทำซ้ำง่าย ๆ บนแผนที่ ตัวอย่างต่อไปนี้แสดงให้เห็นเช่นเดียวกัน

ตัวอย่างของ MapIterator Interface

ตัวอย่างสำหรับ MapIteratorTester.java มีดังนี้ -

import org.apache.commons.collections4.IterableMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.map.HashedMap;
public class MapIteratorTester {
   public static void main(String[] args) {
      IterableMap<String, String> map = new HashedMap<>();
      map.put("1", "One");
      map.put("2", "Two");
      map.put("3", "Three");
      map.put("4", "Four");
      map.put("5", "Five");
      MapIterator<String, String> iterator = map.mapIterator();
      while (iterator.hasNext()) {
         Object key = iterator.next();
         Object value = iterator.getValue();
         System.out.println("key: " + key);
         System.out.println("Value: " + value);
         iterator.setValue(value + "_");
      }
      System.out.println(map);
   }
}

เอาต์พุต

ผลลัพธ์ระบุไว้ด้านล่าง -

key: 3
Value: Three
key: 5
Value: Five
key: 2
Value: Two
key: 4
Value: Four
key: 1
Value: One
{3=Three_, 5=Five_, 2=Two_, 4=Four_, 1=One_}

OrderMap เป็นอินเทอร์เฟซใหม่สำหรับแผนที่เพื่อรักษาลำดับการเพิ่มองค์ประกอบ LinkedMap และ ListOrderMap เป็นการนำไปใช้งานสองแบบ อินเทอร์เฟซนี้รองรับตัววนซ้ำของแผนที่และอนุญาตให้ทำซ้ำได้ทั้งสองทิศทางทั้งไปข้างหน้าหรือข้างหลังในแผนที่ ตัวอย่างต่อไปนี้แสดงให้เห็นเช่นเดียวกัน

ตัวอย่างของ MapIterator Interface

ตัวอย่างของ OrderMapTester.java มีดังต่อไปนี้ -

import org.apache.commons.collections4.OrderedMap;
import org.apache.commons.collections4.map.LinkedMap;
public class OrderedMapTester {
   public static void main(String[] args) {
      OrderedMap<String, String> map = new LinkedMap<String, String>();
      map.put("One", "1");
      map.put("Two", "2");
      map.put("Three", "3");
      System.out.println(map.firstKey());
      System.out.println(map.nextKey("One"));
      System.out.println(map.nextKey("Two"));
   }
}

เอาต์พุต

ผลลัพธ์จะเป็นดังนี้ -

One
Two
Three

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

ตรวจสอบองค์ประกอบที่ไม่ใช่ Null

สามารถใช้เมธอด addIgnoreNull () ของ CollectionUtils เพื่อให้แน่ใจว่ามีการเพิ่มเฉพาะค่าที่ไม่ใช่ค่าว่างลงในคอลเล็กชัน

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.addIgnoreNull() วิธีการ -

public static <T> boolean addIgnoreNull(Collection<T> collection, T object)

พารามิเตอร์

  • collection - คอลเล็กชันที่จะเพิ่มต้องไม่เป็นค่าว่าง

  • object - วัตถุที่จะเพิ่มหากเป็นโมฆะจะไม่ถูกเพิ่ม

ส่งคืนค่า

เป็นจริงหากคอลเล็กชันมีการเปลี่ยนแปลง

ข้อยกเว้น

  • NullPointerException - หากคอลเล็กชันเป็นโมฆะ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.addIgnoreNull()วิธี. เรากำลังพยายามเพิ่มค่า null และค่าตัวอย่างที่ไม่ใช่ค่า null

import java.util.LinkedList;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<String> list = new LinkedList<String>();
      CollectionUtils.addIgnoreNull(list, null);
      CollectionUtils.addIgnoreNull(list, "a");
      System.out.println(list);
      if(list.contains(null)) {
         System.out.println("Null value is present");
      } else {
         System.out.println("Null value is not present");
      }
   }
}

เอาต์พุต

ผลลัพธ์ดังต่อไปนี้ -

[a]
Null value is not present

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

การรวมรายการที่เรียงลำดับสองรายการ

collate () method ของ CollectionUtils สามารถใช้เพื่อรวมสองรายการที่เรียงลำดับแล้ว

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.collate() วิธีการ -

public static <O extends Comparable<? super O>> List<O>
   collate(Iterable<? extends O> a, Iterable<? extends O> b)

พารามิเตอร์

  • a - คอลเล็กชันแรกต้องไม่เป็นค่าว่าง

  • b - คอลเล็กชันที่สองต้องไม่เป็นค่าว่าง

ส่งคืนค่า

รายการที่จัดเรียงใหม่ซึ่งมีองค์ประกอบของคอลเล็กชัน a และ b

ข้อยกเว้น

  • NullPointerException - หากคอลเล็กชันใดเป็นโมฆะ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.collate()วิธี. เราจะรวมรายการที่เรียงลำดับสองรายการจากนั้นพิมพ์รายการที่ผสานและเรียงลำดับ

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<String> sortedList1 = Arrays.asList("A","C","E");
      List<String> sortedList2 = Arrays.asList("B","D","F");
      List<String> mergedList = CollectionUtils.collate(sortedList1, sortedList2);
      System.out.println(mergedList);
   }
}

เอาต์พุต

ผลลัพธ์มีดังนี้ -

[A, B, C, D, E, F]

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

การเปลี่ยนแปลงรายการ

วิธีการรวบรวม () ของ CollectionUtils สามารถใช้ในการแปลงรายการของวัตถุประเภทหนึ่งให้เป็นรายการของวัตถุประเภทต่างๆ

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.collect() วิธีการ -

public static <I,O> Collection<O> collect(Iterable<I> inputCollection,
   Transformer<? super I,? extends O> transformer)

พารามิเตอร์

  • inputCollection - คอลเลกชันที่จะได้รับข้อมูลจากอาจไม่เป็นค่าว่าง

  • Transformer - หม้อแปลงที่จะใช้อาจเป็นโมฆะ

ส่งคืนค่า

ผลลัพธ์ที่เปลี่ยนแปลง (รายการใหม่)

ข้อยกเว้น

  • NullPointerException - หากคอลเลกชันอินพุตเป็นโมฆะ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.collect()วิธี. เราจะแปลงรายการสตริงเป็นรายการจำนวนเต็มโดยการแยกวิเคราะห์ค่าจำนวนเต็มจาก String

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<String> stringList = Arrays.asList("1","2","3");
      List<Integer> integerList = (List<Integer>) CollectionUtils.collect(
         stringList, new Transformer<String, Integer>() {
         @Override
         public Integer transform(String input) {
            return Integer.parseInt(input);
         }
      });
      System.out.println(integerList);
   }
}

เอาต์พุต

เมื่อคุณใช้รหัสคุณจะได้รับรหัสต่อไปนี้ -

[1, 2, 3]

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

วิธีการกรอง ()

filter () method ของ CollectionUtils สามารถใช้เพื่อกรองรายการเพื่อลบอ็อบเจ็กต์ที่ไม่ตรงตามเงื่อนไขที่เพรดิเคตส่งผ่าน

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.filter() วิธีการ -

public static <T> boolean filter(Iterable<T> collection,
   Predicate<? super T> predicate)

พารามิเตอร์

  • collection - คอลเลกชันที่จะได้รับข้อมูลจากอาจไม่เป็นค่าว่าง

  • predicate - เพรดิเคตที่จะใช้เป็นตัวกรองอาจเป็นโมฆะ

ส่งคืนค่า

True หากคอลเลกชันถูกแก้ไขโดยการเรียกนี้มิฉะนั้นจะเป็นเท็จ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.filter()วิธี. เราจะกรองรายการจำนวนเต็มเพื่อให้ได้เลขคู่เท่านั้น

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<Integer> integerList = new ArrayList<Integer>(); 
      integerList.addAll(Arrays.asList(1,2,3,4,5,6,7,8));
      System.out.println("Original List: " + integerList);
      CollectionUtils.filter(integerList, new Predicate<Integer>() {
         @Override
         public boolean evaluate(Integer input) {
            if(input.intValue() % 2 == 0) {
               return true;
            }
            return false;
         }
      });
      System.out.println("Filtered List (Even numbers): " + integerList);
   }
}

เอาต์พุต

มันจะให้ผลลัพธ์ดังต่อไปนี้ -

Original List: [1, 2, 3, 4, 5, 6, 7, 8]
Filtered List (Even numbers): [2, 4, 6, 8]

filterInverse () วิธีการ

filterInverse () เมธอด CollectionUtils สามารถใช้เพื่อกรองรายการเพื่อลบอ็อบเจ็กต์ซึ่งเป็นไปตามเงื่อนไขที่กำหนดโดยเพรดิเคตที่ส่งผ่าน

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.filterInverse() วิธีการ -

public static <T> boolean filterInverse(
   Iterable<T> collection, Predicate<? super T> predicate)

พารามิเตอร์

  • collection - คอลเลกชันที่จะได้รับข้อมูลจากอาจไม่เป็นค่าว่าง

  • predicate - เพรดิเคตที่จะใช้เป็นตัวกรองอาจเป็นโมฆะ

ส่งคืนค่า

True หากคอลเลกชันถูกแก้ไขโดยการเรียกนี้มิฉะนั้นจะเป็นเท็จ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.filterInverse()วิธี. เราจะกรองรายการจำนวนเต็มเพื่อให้ได้จำนวนคี่เท่านั้น

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<Integer> integerList = new ArrayList<Integer>(); 
      integerList.addAll(Arrays.asList(1,2,3,4,5,6,7,8));
      System.out.println("Original List: " + integerList); 
      CollectionUtils.filterInverse(integerList, new Predicate<Integer>() {
         @Override
         public boolean evaluate(Integer input) {
            if(input.intValue() % 2 == 0) {
               return true;
            }
            return false;
         }
      });
      System.out.println("Filtered List (Odd numbers): " + integerList);
   }
}

เอาต์พุต

ผลลัพธ์เป็นไปตามที่ระบุไว้ด้านล่าง -

Original List: [1, 2, 3, 4, 5, 6, 7, 8]
Filtered List (Odd numbers): [1, 3, 5, 7]

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

กำลังตรวจสอบรายการที่ไม่ว่างเปล่า

isNotEmpty () วิธีการ CollectionUtils สามารถใช้เพื่อตรวจสอบว่ารายการไม่ว่างเปล่าโดยไม่ต้องกังวลเกี่ยวกับรายการว่าง ดังนั้นจึงไม่จำเป็นต้องวางการตรวจสอบว่างทุกที่ก่อนที่จะตรวจสอบขนาดของรายการ

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.isNotEmpty() วิธีการ -

public static boolean isNotEmpty(Collection<?> coll)

พารามิเตอร์

  • coll - คอลเล็กชันที่จะตรวจสอบอาจเป็นโมฆะ

ส่งคืนค่า

เป็นจริงหากไม่เป็นค่าว่างและไม่ว่างเปล่า

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.isNotEmpty()วิธี. เราจะตรวจสอบว่ารายการว่างเปล่าหรือไม่

import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<String> list = getList();
      System.out.println("Non-Empty List Check: " + checkNotEmpty1(list));
      System.out.println("Non-Empty List Check: " + checkNotEmpty1(list));
   }
   static List<String> getList() {
      return null;
   }
   static boolean checkNotEmpty1(List<String> list) {
      return !(list == null || list.isEmpty());
   }
   static boolean checkNotEmpty2(List<String> list) {
      return CollectionUtils.isNotEmpty(list);
   }
}

เอาต์พุต

ผลลัพธ์จะได้รับด้านล่าง -

Non-Empty List Check: false
Non-Empty List Check: false

กำลังตรวจสอบรายการว่าง

isEmpty () เมธอด CollectionUtils สามารถใช้เพื่อตรวจสอบว่ารายการว่างเปล่าโดยไม่ต้องกังวลเกี่ยวกับรายการว่าง ดังนั้นจึงไม่จำเป็นต้องวางการตรวจสอบว่างทุกที่ก่อนที่จะตรวจสอบขนาดของรายการ

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.isEmpty() วิธีการ -

public static boolean isEmpty(Collection<?> coll)

พารามิเตอร์

  • coll - คอลเล็กชันที่จะตรวจสอบอาจเป็นโมฆะ

ส่งคืนค่า

True ถ้าว่างเปล่าหรือเป็นโมฆะ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.isEmpty()วิธี. เราจะตรวจสอบว่ารายการว่างเปล่าหรือไม่

import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      List<String> list = getList();
      System.out.println("Empty List Check: " + checkEmpty1(list));
      System.out.println("Empty List Check: " + checkEmpty1(list));
   }
   static List<String> getList() {
      return null;
   }
   static boolean checkEmpty1(List<String> list) {
      return (list == null || list.isEmpty());
   }
   static boolean checkEmpty2(List<String> list) {
      return CollectionUtils.isEmpty(list);
   }
}

เอาต์พุต

ด้านล่างเป็นผลลัพธ์ของรหัส -

Empty List Check: true
Empty List Check: true

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

กำลังตรวจสอบรายการย่อย

isSubCollection () method ของ CollectionUtils สามารถใช้เพื่อตรวจสอบว่าคอลเลกชันมีคอลเล็กชันที่กำหนดหรือไม่

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ

org.apache.commons.collections4.CollectionUtils.isSubCollection() วิธีการ -

public static boolean isSubCollection(
   Collection<?> a, Collection<?> b)

พารามิเตอร์

  • a - คอลเล็กชัน (ย่อย) แรกต้องไม่เป็นโมฆะ

  • b - คอลเล็กชัน (super) ที่สองต้องไม่เป็นโมฆะ

ส่งคืนค่า

จริงถ้า a เป็นคอลเลกชันย่อยของ b

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.isSubCollection()วิธี. เราจะตรวจสอบรายชื่อว่าเป็นส่วนหนึ่งของรายการอื่นหรือไม่

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      //checking inclusion
      List<String> list1 = Arrays.asList("A","A","A","C","B","B");
      List<String> list2 = Arrays.asList("A","A","B","B");
      System.out.println("List 1: " + list1);
      System.out.println("List 2: " + list2);
      System.out.println("Is List 2 contained in List 1: " + 
         CollectionUtils.isSubCollection(list2, list1));
   }
}

เอาต์พุต

คุณจะได้รับผลลัพธ์ต่อไปนี้ -

List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Is List 2 contained in List 1: true

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

กำลังตรวจสอบจุดตัด

สี่แยก () วิธีการของ CollectionUtils สามารถใช้เพื่อรับวัตถุทั่วไประหว่างสองคอลเลกชัน (จุดตัด)

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ org.apache.commons.collections4.CollectionUtils.intersection() วิธีการ -

public static <O> Collection<O> intersection(Iterable<? extends O> a,
   Iterable<? extends O> b)

พารามิเตอร์

  • a - คอลเล็กชัน (ย่อย) แรกต้องไม่เป็นโมฆะ

  • b - คอลเล็กชัน (super) ที่สองต้องไม่เป็นโมฆะ

ส่งคืนค่า

จุดตัดของทั้งสองคอลเลกชัน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.intersection()วิธี. เราจะได้จุดตัดของสองรายการ

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      //checking inclusion
      List<String> list1 = Arrays.asList("A","A","A","C","B","B");
      List<String> list2 = Arrays.asList("A","A","B","B");
      System.out.println("List 1: " + list1);
      System.out.println("List 2: " + list2);
      System.out.println("Commons Objects of List 1 and List 2: "
         + CollectionUtils.intersection(list1, list2));
   }
}

เอาต์พุต

เมื่อคุณเรียกใช้รหัสคุณจะเห็นผลลัพธ์ต่อไปนี้ -

List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Commons Objects of List 1 and List 2: [A, A, B, B]

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

กำลังตรวจสอบ Substraction

สามารถใช้วิธีการลบ () ของ CollectionUtils เพื่อรับคอลเล็กชันใหม่โดยการลบวัตถุของคอลเลกชันหนึ่งออกจากอื่น

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ org.apache.commons.collections4.CollectionUtils.subtract() วิธีการ -

public static <O> Collection<O> subtract(Iterable<? extends O> a,
   Iterable<? extends O> b)

พารามิเตอร์

  • a - คอลเล็กชันที่จะลบออกต้องไม่เป็นค่าว่าง

  • b - คอลเล็กชันที่จะลบต้องไม่เป็นค่าว่าง

ส่งคืนค่า

คอลเลกชันใหม่พร้อมผลลัพธ์

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.subtract()วิธี. เราจะได้การลบสองรายการ

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      //checking inclusion
      List<String> list1 = Arrays.asList("A","A","A","C","B","B");
      List<String> list2 = Arrays.asList("A","A","B","B");
      System.out.println("List 1: " + list1);
      System.out.println("List 2: " + list2);
      System.out.println("List 1 - List 2: " + CollectionUtils.subtract(list1, list2));
   }
}

เอาต์พุต

เมื่อคุณรันโค้ดด้านบนคุณจะเห็นผลลัพธ์ต่อไปนี้ -

List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
List 1 - List 2: [A, C]

คลาส CollectionUtils ของไลบรารี Apache Commons Collections มีวิธีการยูทิลิตี้ที่หลากหลายสำหรับการดำเนินการทั่วไปซึ่งครอบคลุมกรณีการใช้งานที่หลากหลาย ช่วยหลีกเลี่ยงการเขียนโค้ดสำเร็จรูป ไลบรารีนี้มีประโยชน์มากก่อนหน้า jdk 8 เนื่องจากฟังก์ชันที่คล้ายกันมีให้ใน Stream API ของ Java 8 แล้ว

กำลังตรวจสอบสหภาพ

สามารถใช้วิธีการรวบรวมยูเนี่ยน () เพื่อรับการรวมกันของสองคอลเลกชัน

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ org.apache.commons.collections4.CollectionUtils.union() วิธีการ -

public static <O> Collection<O> union(
   Iterable<? extends O> a, Iterable<? extends O> b)

พารามิเตอร์

  • a - คอลเล็กชันแรกต้องไม่เป็นค่าว่าง

  • b - คอลเล็กชันที่สองต้องไม่เป็นค่าว่าง

ส่งคืนค่า

การรวมกันของสองคอลเลกชัน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งาน org.apache.commons.collections4.CollectionUtils.union()วิธี. เราจะได้รับการรวมกันของสองรายการ

import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
   public static void main(String[] args) {
      //checking inclusion
      List<String> list1 = Arrays.asList("A","A","A","C","B","B");
      List<String> list2 = Arrays.asList("A","A","B","B");
      System.out.println("List 1: " + list1);
      System.out.println("List 2: " + list2);
      System.out.println("Union of List 1 and List 2: "
         + CollectionUtils.union(list1, list2));
   }
}

เอาต์พุต

สิ่งนี้สร้างผลลัพธ์ต่อไปนี้ -

List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Union of List 1 and List 2: [A, A, A, B, B, C]