/** * Using custom pattern. * Modes are switched by the first letter. * R for Regex * S for StartsWith * E for EndsWith * Q or any other letter for Equals * C for Contains */ public SelectionModel<T> filter(String pattern) { return filter(s -> { if (s.isEmpty()) return false; char firstChar = pattern.charAt(0); switch (firstChar) { case 'R': return SelectPredicates.REGEX.test(s, pattern.substring(1)); case 'S': return SelectPredicates.STARTS.test(s, pattern.substring(1)); case 'E': return SelectPredicates.ENDS.test(s, pattern.substring(1)); case 'Q': return SelectPredicates.EQUAL.test(s, pattern.substring(1)); case 'C': return SelectPredicates.CONTAINS.test(s, pattern.substring(1)); default: return SelectPredicates.EQUAL.test(s, pattern); } }); }
@Test public void testFilter() { assertTrue( Selector.wrap("ironIngot", "ironPlate", "ironStick", "bronzeIngot", "bronzeStick") .filter("Siron") .stream() .allMatch(s -> s.getName().startsWith("iron")) ); }