diff --git a/core-java-modules/core-java-regex-3/src/main/java/com/baeldung/listregexfilter/RegexFilterExample.java b/core-java-modules/core-java-regex-3/src/main/java/com/baeldung/listregexfilter/RegexFilterExample.java new file mode 100644 index 000000000000..23fc669c8c1f --- /dev/null +++ b/core-java-modules/core-java-regex-3/src/main/java/com/baeldung/listregexfilter/RegexFilterExample.java @@ -0,0 +1,61 @@ +package com.baeldung.listregexfilter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class RegexFilterExample { + + public List filterUsingPatternAndPredicate() { + List fruits = List.of("apple", "banana", "cherry", "apricot", "avocado"); + + Pattern pattern = Pattern.compile("^a.*"); + + return fruits.stream() + .filter(pattern.asPredicate()) + .toList(); + } + + public List filterUsingStringMatches() { + List list = List.of("123", "abc", "456def", "789", "xyz"); + + return list.stream() + .filter(str -> str.matches("\\d+")) + .toList(); + } + + public List filterUsingPatternCompile() { + List numbers = List.of("one", "two", "three", "four", "five"); + List startWithTList = new ArrayList<>(); + + Pattern pattern = Pattern.compile("^t.*"); + + for (String item : numbers) { + Matcher matcher = pattern.matcher(item); + if (matcher.matches()) + startWithTList.add(item); + } + + return startWithTList; + } + + public Map> filterUsingCollectorsPartitioningBy() { + List fruits = List.of("apple", "banana", "apricot", "berry"); + + Pattern pattern = Pattern.compile("^a.*"); + + return fruits.stream() + .collect(Collectors.partitioningBy(pattern.asPredicate())); + } + + public static void main(String[] args) { + RegexFilterExample regexFilterExample = new RegexFilterExample(); + regexFilterExample.filterUsingPatternAndPredicate(); + regexFilterExample.filterUsingStringMatches(); + regexFilterExample.filterUsingPatternCompile(); + regexFilterExample.filterUsingCollectorsPartitioningBy(); + } +} diff --git a/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/listregexfilter/RegexFilterExampleUnitTest.java b/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/listregexfilter/RegexFilterExampleUnitTest.java new file mode 100644 index 000000000000..04cb4fa5a509 --- /dev/null +++ b/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/listregexfilter/RegexFilterExampleUnitTest.java @@ -0,0 +1,37 @@ +package com.baeldung.listregexfilter; + +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class RegexFilterExampleUnitTest { + + RegexFilterExample regexFilterExample = new RegexFilterExample(); + + @Test + void whenfilterUsingPatternAndPredicateCalled_thenReturnElementsStartingWithA() { + List newList = regexFilterExample.filterUsingPatternAndPredicate(); + Assertions.assertEquals(List.of("apple", "apricot", "avocado"), newList); + } + + @Test + void whenfilterUsingStringMatchesCalled_thenReturnElementsContainingDig() { + List newList = regexFilterExample.filterUsingStringMatches(); + Assertions.assertEquals(List.of("123", "789"), newList); + } + + @Test + void whenfilterUsingPatternCompileCalled_thenReturnElementsStartingWithT3() { + List newList = regexFilterExample.filterUsingPatternCompile(); + Assertions.assertEquals(List.of("two", "three"), newList); + } + + @Test + void whenfilterUsingCollectorsPartitioningByCalled_thenReturnElementsStartingWithA4() { + Map> newList = regexFilterExample.filterUsingCollectorsPartitioningBy(); + Assertions.assertEquals(List.of("apple", "apricot"), newList.get(true)); + Assertions.assertEquals(List.of("banana", "berry"), newList.get(false)); + } +}