diff --git a/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java b/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java new file mode 100644 index 0000000000..d046f0f8aa --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java @@ -0,0 +1,47 @@ +package com.baeldung.commons.collectionutil; + +public class Address { + + String locality; + String city; + String zip; + + public String getLocality() { + return locality; + } + + public void setLocality(String locality) { + this.locality = locality; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Address [locality=").append(locality).append(", city=").append(city).append(", zip=").append(zip).append("]"); + return builder.toString(); + } + + public Address(String locality, String city, String zip) { + super(); + this.locality = locality; + this.city = city; + this.zip = zip; + } + +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java b/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java new file mode 100644 index 0000000000..2d3be36143 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java @@ -0,0 +1,118 @@ +package com.baeldung.commons.collectionutil; + +public class Customer implements Comparable { + + Integer id; + String name; + Long phone; + String locality; + String city; + String zip; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getPhone() { + return phone; + } + + public void setPhone(Long phone) { + this.phone = phone; + } + + public String getLocality() { + return locality; + } + + public void setLocality(String locality) { + this.locality = locality; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public Customer(Integer id, String name, Long phone, String locality, String city, String zip) { + super(); + this.id = id; + this.name = name; + this.phone = phone; + this.locality = locality; + this.city = city; + this.zip = zip; + } + + public Customer(Integer id, String name, Long phone) { + super(); + this.id = id; + this.name = name; + this.phone = phone; + } + + public Customer(String name) { + super(); + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Customer other = (Customer) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public int compareTo(Customer o) { + return this.name.compareTo(o.getName()); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Customer [id=").append(id).append(", name=").append(name).append(", phone=").append(phone).append("]"); + return builder.toString(); + } + +} \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java new file mode 100644 index 0000000000..2e4a1f25f9 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java @@ -0,0 +1,128 @@ +package com.baeldung.commons.collections; + + +import com.baeldung.commons.collectionutil.Address; +import com.baeldung.commons.collectionutil.Customer; +import org.apache.commons.collections4.Closure; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.Transformer; +import org.junit.Before; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class CollectionUtilsGuideTest { + + + Customer customer1 = new Customer(1, "Daniel", 123456l, "locality1", "city1", "1234"); + Customer customer4 = new Customer(4, "Bob", 456789l, "locality4", "city4", "4567"); + List list1, list2, list3, linkedList1; + + @Before + public void setup() { + Customer customer2 = new Customer(2, "Fredrik", 234567l, "locality2", "city2", "2345"); + Customer customer3 = new Customer(3, "Kyle", 345678l, "locality3", "city3", "3456"); + Customer customer5 = new Customer(5, "Cat", 567890l, "locality5", "city5", "5678"); + Customer customer6 = new Customer(6, "John", 678901l, "locality6", "city6", "6789"); + + list1 = Arrays.asList(customer1, customer2, customer3); + list2 = Arrays.asList(customer4, customer5, customer6); + list3 = Arrays.asList(customer1, customer2); + + linkedList1 = new LinkedList<>(list1); + } + + @Test + public void givenList_whenAddIgnoreNull_thenNoNullAdded() { + CollectionUtils.addIgnoreNull(list1, null); + assertFalse(list1.contains(null)); + } + + @Test + public void givenTwoSortedLists_whenCollated_thenSorted() { + List sortedList = CollectionUtils.collate(list1, list2); + assertTrue(sortedList.get(0).getName().equals("Bob")); + assertTrue(sortedList.get(2).getName().equals("Daniel")); + } + + @Test + public void givenListOfCustomers_whenTransformed_thenListOfAddress() { + Collection
addressCol = CollectionUtils.collect(list1, new Transformer() { + public Address transform(Customer customer) { + return new Address(customer.getLocality(), customer.getCity(), customer.getZip()); + } + }); + + List
addressList = new ArrayList
(addressCol); + assertTrue(addressList.size() == 3); + assertTrue(addressList.get(0).getLocality().equals("locality1")); + } + + @Test + public void givenCustomerList_whenCountMatches_thenCorrect() { + int result = CollectionUtils.countMatches(list1, customer -> Arrays.asList("Daniel","Kyle").contains(customer.getName())); + assertTrue(result == 2); + } + + @Test + public void givenCustomerList_WhenFiltered_thenCorrectSize() { + + boolean isModified = CollectionUtils.filter(linkedList1, customer -> Arrays.asList("Daniel","Kyle").contains(customer.getName())); + + //filterInverse does the opposite. It removes the element from the list if the Predicate returns true + //select and selectRejected work the same way except that they do not remove elements from the given collection and return a new collection + + assertTrue(isModified && linkedList1.size() == 2); + } + + @Test + public void givenCustomerList_whenForAllDoSetNameNull_thenNameNull() { + CollectionUtils.forAllDo(list1, customer -> { + customer.setName(null); + }); + + // forAllButLast does the same except for the last element in the collection + assertTrue(list1.get(0).getName() == null); + } + + @Test + public void givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue() { + List emptyList = new ArrayList(); + List nullList = null; + + //Very handy at times where we want to check if a collection is not null and not empty too. + //isNotEmpty does the opposite. Handy because using ! operator on isEmpty makes it missable while reading + assertTrue(CollectionUtils.isNotEmpty(list1)); + assertTrue(CollectionUtils.isEmpty(nullList)); + assertTrue(CollectionUtils.isEmpty(emptyList)); + } + + @Test + public void givenCustomerListAndASubcollection_whenChecked_thenTrue() { + assertTrue(CollectionUtils.isSubCollection(list3, list1)); + } + + @Test + public void givenTwoLists_whenIntersected_thenCheckSize() { + Collection intersection = CollectionUtils.intersection(list1, list3); + assertTrue(intersection.size() == 2); + } + + @Test + public void givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA() { + Collection result = CollectionUtils.subtract(list1, list3); + assertFalse(result.contains(customer1)); + } + + @Test + public void givenTwoLists_whenUnioned_thenCheckElementPresentInResult() { + Collection union = CollectionUtils.union(list1, list2); + assertTrue(union.contains(customer1)); + assertTrue(union.contains(customer4)); + } + +} \ No newline at end of file