source: josm/trunk/src/org/openstreetmap/josm/tools/Predicates.java@ 6962

Last change on this file since 6962 was 6870, checked in by simon04, 10 years ago

fix #9598 - Validator: do not report "Overlapping ways" for buildings

File size: 3.2 KB
Line 
1package org.openstreetmap.josm.tools;
2
3import org.openstreetmap.josm.data.osm.OsmPrimitive;
4
5import java.util.Collection;
6import java.util.regex.Pattern;
7
8/**
9 * Utility class for creating {@link Predicate}s.
10 */
11public final class Predicates {
12
13 private Predicates() {
14 }
15
16 /**
17 * Returns the negation of {@code predicate}.
18 */
19 public static <T> Predicate<T> not(final Predicate<T> predicate) {
20 return new Predicate<T>() {
21 @Override
22 public boolean evaluate(T obj) {
23 return !predicate.evaluate(obj);
24 }
25 };
26 }
27
28 /**
29 * Returns a {@link Predicate} executing {@link Utils#equal}.
30 */
31 public static <T> Predicate<T> equalTo(final T ref) {
32 return new Predicate<T>() {
33 @Override
34 public boolean evaluate(T obj) {
35 return Utils.equal(obj, ref);
36 }
37 };
38 }
39
40 /**
41 * Returns a {@link Predicate} executing {@link Pattern#matcher(CharSequence)} and {@link java.util.regex.Matcher#matches}.
42 */
43 public static Predicate<String> stringMatchesPattern(final Pattern pattern) {
44 return new Predicate<String>() {
45 @Override
46 public boolean evaluate(String string) {
47 return pattern.matcher(string).matches();
48 }
49 };
50 }
51
52 /**
53 * Returns a {@link Predicate} executing {@link Pattern#matcher(CharSequence)} and {@link java.util.regex.Matcher#find}.
54 */
55 public static Predicate<String> stringContainsPattern(final Pattern pattern) {
56 return new Predicate<String>() {
57 @Override
58 public boolean evaluate(String string) {
59 return pattern.matcher(string).find();
60 }
61 };
62 }
63
64 /**
65 * Returns a {@link Predicate} executing {@link String#contains(CharSequence)}.
66 */
67 public static Predicate<String> stringContains(final String pattern) {
68 return new Predicate<String>() {
69 @Override
70 public boolean evaluate(String string) {
71 return string.contains(pattern);
72 }
73 };
74 }
75
76 /**
77 * Returns a {@link Predicate} executing {@link OsmPrimitive#hasTag(String, String...)}.
78 */
79 public static Predicate<OsmPrimitive> hasTag(final String key, final String... values) {
80 return new Predicate<OsmPrimitive>() {
81 @Override
82 public boolean evaluate(OsmPrimitive p) {
83 return p.hasTag(key, values);
84 }
85 };
86 }
87
88 /**
89 * Returns a {@link Predicate} executing {@link OsmPrimitive#hasKey(String)}.
90 */
91 public static Predicate<OsmPrimitive> hasKey(final String key) {
92 return new Predicate<OsmPrimitive>() {
93 @Override
94 public boolean evaluate(OsmPrimitive p) {
95 return p.hasKey(key);
96 }
97 };
98 }
99
100 /**
101 * Returns a {@link Predicate} executing {@link Collection#contains(Object)}.
102 */
103 public static <T> Predicate<T> inCollection(final Collection<? extends T> target) {
104 return new Predicate<T>() {
105 @Override
106 public boolean evaluate(T object) {
107 return target.contains(object);
108 }
109 };
110 }
111}
Note: See TracBrowser for help on using the repository browser.