From ae2b60ff8080769fc76bba439345e37c7c7604dd Mon Sep 17 00:00:00 2001 From: caroline Date: Wed, 14 Aug 2019 09:35:46 +0200 Subject: [PATCH] Example added for BAEL-3083 --- .../findastring/FindAStringInGivenList.java | 79 ++++++++++++++++ .../FindAStringInListUnitTest.java | 93 +++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 core-java-modules/core-java-collections-list-2/src/main/java/com/baeldung/findastring/FindAStringInGivenList.java create mode 100644 core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/findastring/FindAStringInListUnitTest.java diff --git a/core-java-modules/core-java-collections-list-2/src/main/java/com/baeldung/findastring/FindAStringInGivenList.java b/core-java-modules/core-java-collections-list-2/src/main/java/com/baeldung/findastring/FindAStringInGivenList.java new file mode 100644 index 0000000000..c63a50e084 --- /dev/null +++ b/core-java-modules/core-java-collections-list-2/src/main/java/com/baeldung/findastring/FindAStringInGivenList.java @@ -0,0 +1,79 @@ +package com.baeldung.findastring; + +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.IteratorUtils; +import org.apache.commons.collections4.PredicateUtils; +import org.apache.commons.lang3.StringUtils; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class FindAStringInGivenList { + + + public List findUsingLoopWithRegex(String search, List list) { + + List matches = new ArrayList(); + + String pattern = ".*\\b"+search+"\\b.*"; + Pattern p = Pattern.compile(pattern); + + for(String str: list) { + if (p.matcher(str).matches()) { + matches.add(str); + } + } + + return matches; + } + + + public List findUsingLoop(String search, List list) { + + List matches = new ArrayList(); + + for(String str: list) { + if (search != null && str.contains(search)) { + matches.add(str); + } + } + + return matches; + } + + public List findUsingStream(String search, List list) { + + List matchingElements = + list.stream() + .filter(str -> search != null) + .filter(str -> str.trim().contains(search)) + .collect(Collectors.toList()); + + return matchingElements; + } + + public List findUsingGuava(String search, List list) { + if (search == null) return Lists.newArrayList(); + + Iterable result = Iterables.filter(Iterables.filter(list,Predicates.notNull()), Predicates.containsPattern(search)); + + return Lists.newArrayList(result.iterator()); + } + + public List findUsingApacheCommon(String search, List list) { + CollectionUtils.filter(list, PredicateUtils.notNullPredicate()); + Iterable result = IterableUtils.filteredIterable(list, new org.apache.commons.collections4.Predicate() { + public boolean evaluate(String listElement) { + return search != null && StringUtils.isNotEmpty(listElement) ? listElement.contains(search) : false; + } + }); + + return IteratorUtils.toList(result.iterator()); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/findastring/FindAStringInListUnitTest.java b/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/findastring/FindAStringInListUnitTest.java new file mode 100644 index 0000000000..bc2fbb0000 --- /dev/null +++ b/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/findastring/FindAStringInListUnitTest.java @@ -0,0 +1,93 @@ +package com.baeldung.findastring; + +import java.util.ArrayList; +import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.Test; +public class FindAStringInListUnitTest { + + private static List list = new ArrayList<>(); + + static { + list.add("Jack and Jill"); + list.add("James and Sarah"); + list.add("Sam and Louise"); + list.add("Jack"); + list.add(null); + list.add(""); + } + + private static FindAStringInGivenList findAStringInGivenList = new FindAStringInGivenList(); + + @Test + public void givenAString_whenFoundUsingLoopWithRegex_thenReturnList() { + List matchingElements = findAStringInGivenList.findUsingLoopWithRegex("Jack", list); + assertEquals(2, matchingElements.size()); + assertEquals("Jack and Jill", matchingElements.get(0)); + assertEquals("Jack", matchingElements.get(1)); + } + + @Test + public void givenAString_whenNullFoundUsingLoopWithRegex_thenReturnEmptyList(){ + List matchingElements = findAStringInGivenList.findUsingLoopWithRegex(null, list); + assertEquals(0, matchingElements.size()); + } + + @Test + public void givenAString_whenFoundUsingLoop_thenReturnList() { + List matchingElements = findAStringInGivenList.findUsingLoop("Jack", list); + assertEquals(2, matchingElements.size()); + assertEquals("Jack and Jill", matchingElements.get(0)); + assertEquals("Jack", matchingElements.get(1)); + } + + @Test + public void givenAString_whenNullFoundUsingLoop_thenReturnEmptyList(){ + List matchingElements = findAStringInGivenList.findUsingLoop(null, list); + assertEquals(0, matchingElements.size()); + } + + + @Test + public void givenAString_whenFoundUsingStream_thenReturnList(){ + List matchingElements = findAStringInGivenList.findUsingStream("Jack", list); + assertEquals(2, matchingElements.size()); + assertEquals("Jack and Jill", matchingElements.get(0)); + assertEquals("Jack", matchingElements.get(1)); + } + + @Test + public void givenAString_whenNullFoundUsingStream_thenReturnEmptyList(){ + List matchingElements = findAStringInGivenList.findUsingStream(null, list); + assertEquals(0, matchingElements.size()); + } + + @Test + public void givenAString_whenFoundUsingApacheCommons_thenReturnList(){ + List matchingElements = findAStringInGivenList.findUsingApacheCommon("Jack", list); + assertEquals(2, matchingElements.size()); + assertEquals("Jack and Jill", matchingElements.get(0)); + assertEquals("Jack", matchingElements.get(1)); + } + + @Test + public void givenAString_whenNullFoundUsingApacheCommons_thenReturnEmptyList(){ + List matchingElements = findAStringInGivenList.findUsingApacheCommon(null, list); + assertEquals(0, matchingElements.size()); + } + + @Test + public void givenAString_whenFoundUsingGuava_thenReturnList(){ + List matchingElements = findAStringInGivenList.findUsingGuava("Jack", list); + assertEquals(2, matchingElements.size()); + assertEquals("Jack and Jill", matchingElements.get(0)); + assertEquals("Jack", matchingElements.get(1)); + } + + @Test + public void givenAString_whenNullFoundUsingGuava_thenReturnEmptyList(){ + List matchingElements = findAStringInGivenList.findUsingGuava(null, list); + assertEquals(0, matchingElements.size()); + } + +}