class HTMLElement { public HTMLElement(String tagName) { super(); this.tagName = tagName; } private String tagName; @Override public String toString() { return Objects.toStringHelper(HTMLElement.class) .add("tagName", tagName) .toString(); } public String getTagName() { return tagName; } } Predicate<HTMLElement> byAnchor = new Predicate<HTMLElement>() { public boolean apply(HTMLElement input) { return input.getTagName().startsWith("a"); } };
@Test public void filter_collection_with_predicate () { List<HTMLElement> htmlElements = Lists.newArrayList( new HTMLElement("a:link"), new HTMLElement("a:visited"), new HTMLElement("a:hover"), new HTMLElement("a:active"), new HTMLElement("a:focus"), new HTMLElement("a:focus:hover"), new HTMLElement("p"), new HTMLElement("p:first-letter"), new HTMLElement("p:first-line") ); Collection<HTMLElement> anchors = Collections2.filter(htmlElements, byAnchor); logger.info(anchors); assertEquals(6, anchors.size()); }
Output
[ HTMLElement{tagName=a:link}, HTMLElement{tagName=a:visited}, HTMLElement{tagName=a:hover}, HTMLElement{tagName=a:active}, HTMLElement{tagName=a:focus}, HTMLElement{tagName=a:focus:hover} ]
@Test public void filter_empty_null_elements() { List<String> words = Lists.newArrayList( "", null, "do", "not", "cry", null, "over", "spilt", "beer"); Predicate<String> NOT_EMPTY = new Predicate<String>() { @Override public boolean apply(String arg0) { return !arg0.isEmpty(); } }; Iterable<String> filteredWords = Iterables.filter(words, Predicates. and(Predicates.notNull(), NOT_EMPTY)); logger.info(filteredWords); assertThat(filteredWords, IsIterableContainingInOrder. <String>contains("do", "not", "cry", "over", "spilt", "beer")); }
[do, not, cry, over, spilt, beer]
/** * {@link CharMatcher} implements predicate but has special syntax. */ @Test public void charmatcher_implements_predicate () { String theDigits = CharMatcher .DIGIT .retainFrom("ACB 132, ABC 123"); // only the digits assertEquals("132123", theDigits); }