Setup
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");
}
};
Filter collection
@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}
]
Filter empty or null elements
@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"));
}
Output
[do, not, cry, over, spilt, beer]
Charmatcher
/**
* {@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);
}