/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.function.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
List
<TestEnum
> allEnums
= Arrays.
asList( new TestEnum
(Arrays.
asList(FileFormatCodeEnum.
values()), s
-> FileFormatCodeEnum.
parse(s
)) ,
new TestEnum
(Arrays.
asList(RoleTypeCodeEnum.
values()), s
-> RoleTypeCodeEnum.
parse(s
)));
for (TestEnum t : allEnums) {
for (Enum v : t.getValues()) {
System.
out.
println(t.
getParse().
apply(v.
toString()) == v
); }
}
}
}
enum FileFormatCodeEnum {
ONE, TWO;
public static FileFormatCodeEnum parse
(String s
) { return s.charAt(0)=='O' ? ONE : TWO;
}
}
enum RoleTypeCodeEnum {
THREE, FOUR;
public static RoleTypeCodeEnum parse
(String s
) { return s.charAt(0)=='T' ? THREE : FOUR;
}
}
class TestEnum {
private final List<Enum> values;
private final Function
<String,Enum
> parse
; public TestEnum
(List
<Enum
> v, Function
<String,Enum
> p
) { values = v;
parse = p;
}
public List<Enum> getValues() { return values; }
public Function
<String,Enum
> getParse
() { return parse
; } }
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7Ckxpc3Q8VGVzdEVudW0+IGFsbEVudW1zID0gQXJyYXlzLmFzTGlzdCgKICAgIG5ldyBUZXN0RW51bShBcnJheXMuYXNMaXN0KEZpbGVGb3JtYXRDb2RlRW51bS52YWx1ZXMoKSksIHMgLT4gRmlsZUZvcm1hdENvZGVFbnVtLnBhcnNlKHMpKQosICAgbmV3IFRlc3RFbnVtKEFycmF5cy5hc0xpc3QoUm9sZVR5cGVDb2RlRW51bS52YWx1ZXMoKSksIHMgLT4gUm9sZVR5cGVDb2RlRW51bS5wYXJzZShzKSkKKTsKZm9yIChUZXN0RW51bSB0IDogYWxsRW51bXMpIHsKICAgIGZvciAoRW51bSB2IDogdC5nZXRWYWx1ZXMoKSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldFBhcnNlKCkuYXBwbHkodi50b1N0cmluZygpKSA9PSB2KTsKICAgIH0KfQoJfQp9CgplbnVtIEZpbGVGb3JtYXRDb2RlRW51bSB7CiAgICBPTkUsIFRXTzsKICAgIHB1YmxpYyBzdGF0aWMgRmlsZUZvcm1hdENvZGVFbnVtIHBhcnNlKFN0cmluZyBzKSB7CiAgICAgICAgcmV0dXJuIHMuY2hhckF0KDApPT0nTycgPyBPTkUgOiBUV087CiAgICB9Cn0KZW51bSBSb2xlVHlwZUNvZGVFbnVtIHsKICAgIFRIUkVFLCBGT1VSOwogICAgcHVibGljIHN0YXRpYyBSb2xlVHlwZUNvZGVFbnVtIHBhcnNlKFN0cmluZyBzKSB7CiAgICAgICAgcmV0dXJuIHMuY2hhckF0KDApPT0nVCcgPyBUSFJFRSA6IEZPVVI7CiAgICB9Cn0KY2xhc3MgVGVzdEVudW0gewogICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEVudW0+IHZhbHVlczsKICAgIHByaXZhdGUgZmluYWwgRnVuY3Rpb248U3RyaW5nLEVudW0+IHBhcnNlOwogICAgcHVibGljIFRlc3RFbnVtKExpc3Q8RW51bT4gdiwgRnVuY3Rpb248U3RyaW5nLEVudW0+IHApIHsKICAgICAgICB2YWx1ZXMgPSB2OwogICAgICAgIHBhcnNlID0gcDsKICAgIH0KICAgIHB1YmxpYyBMaXN0PEVudW0+IGdldFZhbHVlcygpIHsgcmV0dXJuIHZhbHVlczsgfQogICAgcHVibGljIEZ1bmN0aW9uPFN0cmluZyxFbnVtPiBnZXRQYXJzZSgpIHsgcmV0dXJuIHBhcnNlOyB9Cn0K