/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.reflect.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
List<Data> allItems = new ArrayList<>();
allItems.add(new Data("x", "y", "z"));
allItems.add(new Data("x", "y", "a"));
allItems.add(new Data("x", "y", "b"));
allItems.add(new Data("x", "y", "c"));
allItems.add(new Data("x", "d", "z"));
allItems.add(new Data("e", "y", "z"));
List<Data> filtered = new ArrayList<>();
Map
<String,String
> propertyMap
= new HashMap
<>();propertyMap.put("getA", "x");
propertyMap.put("getB", "y");
for (Data d : allItems) {
boolean allPass = true;
for (Map.
Entry<String,String
> entry
: propertyMap.
entrySet()) { Method m
= d.
getClass().
getMethod(entry.
getKey()); if (m == null || !entry.getValue().equals(m.invoke(d))){
allPass = false;
break;
}
}
if (allPass) {
filtered.add(d);
}
}
for (Data d : filtered) {
System.
out.
println(d.
getA()+"-"+d.
getB()+"-"+d.
getC()); }
}
}
class Data {
return a;
}
return b;
}
return c;
}
this.a = a;
this.b = b;
this.c = c;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoKCkxpc3Q8RGF0YT4gYWxsSXRlbXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJ4IiwgInkiLCAieiIpKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJ4IiwgInkiLCAiYSIpKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJ4IiwgInkiLCAiYiIpKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJ4IiwgInkiLCAiYyIpKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJ4IiwgImQiLCAieiIpKTsKYWxsSXRlbXMuYWRkKG5ldyBEYXRhKCJlIiwgInkiLCAieiIpKTsKTGlzdDxEYXRhPiBmaWx0ZXJlZCA9IG5ldyBBcnJheUxpc3Q8PigpOwpNYXA8U3RyaW5nLFN0cmluZz4gcHJvcGVydHlNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CnByb3BlcnR5TWFwLnB1dCgiZ2V0QSIsICJ4Iik7CnByb3BlcnR5TWFwLnB1dCgiZ2V0QiIsICJ5Iik7CmZvciAoRGF0YSBkIDogYWxsSXRlbXMpIHsKICAgIGJvb2xlYW4gYWxsUGFzcyA9IHRydWU7CiAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsU3RyaW5nPiBlbnRyeSA6IHByb3BlcnR5TWFwLmVudHJ5U2V0KCkpIHsKICAgICAgICBNZXRob2QgbSA9IGQuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoZW50cnkuZ2V0S2V5KCkpOwogICAgICAgIGlmIChtID09IG51bGwgfHwgIWVudHJ5LmdldFZhbHVlKCkuZXF1YWxzKG0uaW52b2tlKGQpKSl7CiAgICAgICAgICAgIGFsbFBhc3MgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGFsbFBhc3MpIHsKICAgICAgICBmaWx0ZXJlZC5hZGQoZCk7CiAgICB9Cn0KZm9yIChEYXRhIGQgOiBmaWx0ZXJlZCkgewoJU3lzdGVtLm91dC5wcmludGxuKGQuZ2V0QSgpKyItIitkLmdldEIoKSsiLSIrZC5nZXRDKCkpOwp9CgoKCX0KfQoKY2xhc3MgRGF0YSB7CglTdHJpbmcgYTsKCVN0cmluZyBiOwoJU3RyaW5nIGM7CglwdWJsaWMgU3RyaW5nIGdldEEoKSB7CgkJcmV0dXJuIGE7Cgl9CglwdWJsaWMgU3RyaW5nIGdldEIoKSB7CgkJcmV0dXJuIGI7Cgl9CglwdWJsaWMgU3RyaW5nIGdldEMoKSB7CgkJcmV0dXJuIGM7Cgl9CglwdWJsaWMgRGF0YShTdHJpbmcgYSwgU3RyaW5nIGIsIFN0cmluZyBjKSB7CgkJdGhpcy5hID0gYTsKCQl0aGlzLmIgPSBiOwoJCXRoaXMuYyA9IGM7Cgl9Cn0=