/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
Map
<String, HashSet
<String
>> FinalMap
= new HashMap
<String, HashSet
<String
>>(); Map
<String, String
> mapViewFromProperties
= new HashMap
<>(); mapViewFromProperties.put("bi", "aa,bb");
mapViewFromProperties.put("n", "xx,yy");
Set<String> filter = new HashSet<String>();
filter.add("bi.aa");
filter.add("bi.cc");
filter.add("-bi.bb");
if (mapViewFromProperties != null && !mapViewFromProperties.isEmpty()) {
mapViewFromProperties.forEach((key, value) -> {
String[] values
= value.
split(","); HashSet
<String
> hashSet
= new HashSet
<String
>(Arrays.
asList(values
)); FinalMap.put(key, hashSet);
});
Map
<String, HashSet
<String
>> finalViewNegate
= new HashMap
<String, HashSet
<String
>>(); if (!filter.isEmpty()) {
for (String newStr
: filter
) { if (newStr.startsWith("-")) {
newStr = newStr.substring(1);
if (newStr.contains(".")) {
String[] parts1
= newStr.
split("\\."); key1 = parts1[0];
val1 = parts1[1];
if (key1 != null && finalViewNegate.containsKey(key1)) {
HashSet<String> set1 = finalViewNegate.get(key1);
set1.add(val1);
finalViewNegate.put(key1, set1);
}
else {
HashSet<String> set1 = new HashSet<String>();
set1.add(val1);
finalViewNegate.put(key1, set1);
}
}
else {
HashSet<String> set1 = new HashSet<String>();
finalViewNegate.put(newStr, set1);
}
}
else {
if (newStr.contains(".")) {
String[] parts
= newStr.
split("\\."); key = parts[0];
val = parts[1];
if (key != null && FinalMap.containsKey(key)) {
HashSet<String> set = FinalMap.get(key);
set.add(val);
FinalMap.put(key, set);
}
else {
HashSet<String> set = new HashSet<String>();
set.add(val);
FinalMap.put(key, set);
}
}
}
}
}
/**
* finalView = finalView - finalViewNegate
*/
if (finalViewNegate != null && !finalViewNegate.isEmpty()) {
finalViewNegate.forEach((key, value) -> {
if (value.isEmpty()) {
FinalMap.remove(key);
}
else {
if (FinalMap.containsKey(key)) {
HashSet<String> set = FinalMap.get(key);
set.remove(val);
FinalMap.put(key, set);
}
}
}
});
}
}
System.
out.
println("---->"+FinalMap.
toString()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQkJCQoJCU1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4gRmluYWxNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4oKTsKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcFZpZXdGcm9tUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPD4oKTsKCQltYXBWaWV3RnJvbVByb3BlcnRpZXMucHV0KCJiaSIsICJhYSxiYiIpOwoJCW1hcFZpZXdGcm9tUHJvcGVydGllcy5wdXQoIm4iLCAieHgseXkiKTsKCgkJU2V0PFN0cmluZz4gZmlsdGVyID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwoJCWZpbHRlci5hZGQoImJpLmFhIik7CgkJZmlsdGVyLmFkZCgiYmkuY2MiKTsKCQlmaWx0ZXIuYWRkKCItYmkuYmIiKTsKCQkKCgkJaWYgKG1hcFZpZXdGcm9tUHJvcGVydGllcyAhPSBudWxsICYmICFtYXBWaWV3RnJvbVByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CgkJCW1hcFZpZXdGcm9tUHJvcGVydGllcy5mb3JFYWNoKChrZXksIHZhbHVlKSAtPiB7CgkJCQlTdHJpbmdbXSB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgiLCIpOwoJCQkJSGFzaFNldDxTdHJpbmc+IGhhc2hTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KEFycmF5cy5hc0xpc3QodmFsdWVzKSk7CgkJCQlGaW5hbE1hcC5wdXQoa2V5LCBoYXNoU2V0KTsKCQkJfSk7CgoJCQlNYXA8U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4+IGZpbmFsVmlld05lZ2F0ZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxTdHJpbmc+PigpOwoJCQlpZiAoIWZpbHRlci5pc0VtcHR5KCkpIHsKCQkJCWZvciAoU3RyaW5nIG5ld1N0ciA6IGZpbHRlcikgewoJCQkJCWlmIChuZXdTdHIuc3RhcnRzV2l0aCgiLSIpKSB7CgkJCQkJCW5ld1N0ciA9IG5ld1N0ci5zdWJzdHJpbmcoMSk7CgkJCQkJCWlmIChuZXdTdHIuY29udGFpbnMoIi4iKSkgewoJCQkJCQkJU3RyaW5nW10gcGFydHMxID0gbmV3U3RyLnNwbGl0KCJcXC4iKTsKCQkJCQkJCVN0cmluZyBrZXkxLCB2YWwxOwoJCQkJCQkJa2V5MSA9IHBhcnRzMVswXTsKCQkJCQkJCXZhbDEgPSBwYXJ0czFbMV07CgoJCQkJCQkJaWYgKGtleTEgIT0gbnVsbCAmJiBmaW5hbFZpZXdOZWdhdGUuY29udGFpbnNLZXkoa2V5MSkpIHsKCQkJCQkJCQlIYXNoU2V0PFN0cmluZz4gc2V0MSA9IGZpbmFsVmlld05lZ2F0ZS5nZXQoa2V5MSk7CgkJCQkJCQkJc2V0MS5hZGQodmFsMSk7CgkJCQkJCQkJZmluYWxWaWV3TmVnYXRlLnB1dChrZXkxLCBzZXQxKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCUhhc2hTZXQ8U3RyaW5nPiBzZXQxID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwoJCQkJCQkJCXNldDEuYWRkKHZhbDEpOwoJCQkJCQkJCWZpbmFsVmlld05lZ2F0ZS5wdXQoa2V5MSwgc2V0MSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlIYXNoU2V0PFN0cmluZz4gc2V0MSA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKCQkJCQkJCWZpbmFsVmlld05lZ2F0ZS5wdXQobmV3U3RyLCBzZXQxKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJU3RyaW5nIGtleTsKCQkJCQkJU3RyaW5nIHZhbDsKCgkJCQkJCWlmIChuZXdTdHIuY29udGFpbnMoIi4iKSkgewoJCQkJCQkJU3RyaW5nW10gcGFydHMgPSBuZXdTdHIuc3BsaXQoIlxcLiIpOwoJCQkJCQkJa2V5ID0gcGFydHNbMF07CgkJCQkJCQl2YWwgPSBwYXJ0c1sxXTsKCgkJCQkJCQlpZiAoa2V5ICE9IG51bGwgJiYgRmluYWxNYXAuY29udGFpbnNLZXkoa2V5KSkgewoJCQkJCQkJCUhhc2hTZXQ8U3RyaW5nPiBzZXQgPSBGaW5hbE1hcC5nZXQoa2V5KTsKCQkJCQkJCQlzZXQuYWRkKHZhbCk7CgkJCQkJCQkJRmluYWxNYXAucHV0KGtleSwgc2V0KTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCUhhc2hTZXQ8U3RyaW5nPiBzZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CgkJCQkJCQkJc2V0LmFkZCh2YWwpOwoJCQkJCQkJCUZpbmFsTWFwLnB1dChrZXksIHNldCk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8qKgoJCQkqIGZpbmFsVmlldyA9IGZpbmFsVmlldyAtIGZpbmFsVmlld05lZ2F0ZQoJCQkqLwoJCQlpZiAoZmluYWxWaWV3TmVnYXRlICE9IG51bGwgJiYgIWZpbmFsVmlld05lZ2F0ZS5pc0VtcHR5KCkpIHsKCQkJCWZpbmFsVmlld05lZ2F0ZS5mb3JFYWNoKChrZXksIHZhbHVlKSAtPiB7CgkJCQkJU3RyaW5nIGxyID0ga2V5OwoJCQkJCWlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKCQkJCQkJU3RyaW5nIG5vVXNlczEgPSAiMSI7CgkJCQkJCUZpbmFsTWFwLnJlbW92ZShrZXkpOwoJCQkJCQlTdHJpbmcgbm9Vc2VzMiA9ICIxIjsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCWZvciAoU3RyaW5nIHZhbCA6IHZhbHVlKSB7CgkJCQkJCQlpZiAoRmluYWxNYXAuY29udGFpbnNLZXkoa2V5KSkgewoJCQkJCQkJCUhhc2hTZXQ8U3RyaW5nPiBzZXQgPSBGaW5hbE1hcC5nZXQoa2V5KTsKCQkJCQkJCQlzZXQucmVtb3ZlKHZhbCk7CgkJCQkJCQkJRmluYWxNYXAucHV0KGtleSwgc2V0KTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlTdHJpbmcgbm9Vc2VzID0gIjEiOwoJCQkJfSk7CgkJCX0KCQl9CgkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tPiIrRmluYWxNYXAudG9TdHJpbmcoKSk7Cgl9CgkJCQp9