/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.util.stream.Collectors;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
List
<String
> listKeys
= new ArrayList
<>(List.
of("A",
"B",
"C"));
Map<User, Long> mapUsers = new HashMap<>();
mapUsers.put(new User("Annie", "A"), 23L);
mapUsers.put(new User("Paul", "C"), 16L);
List<UserCount> listRes = listKeys.stream()
.map(key -> {
User user = mapUsers.keySet().stream().filter(u -> u.getKey().equals(key)).findFirst().orElse(null);
return new UserCount(key, user != null ? mapUsers.get(user) : 0L);
})
.collect(Collectors.toList());
}
}
class User {
this.name = name;
this.key = key;
}
return name;
}
return key;
}
@Override
public boolean equals
(Object obj
) { if (obj == this) return true;
if (obj == null) return false;
if (obj.getClass() != getClass()) return false;
User other = (User) obj;
return Objects.equals(name, other.getName()) && Objects.equals(key, other.getKey());
}
@Override
public int hashCode() {
return Objects.hash(name, key);
}
return String.
format("%s - %s", name, key
); }
}
class UserCount {
private long count;
public UserCount
(String key,
long count
) { this.key = key;
this.count = count;
}
return key;
}
public long getCount() {
return count;
}
@Override
public boolean equals
(Object obj
) { if (obj == this) return true;
if (obj == null) return false;
if (obj.getClass() != getClass()) return false;
UserCount other = (UserCount) obj;
return Objects.equals(key, other.getKey()) && Objects.equals(count, other.getCount());
}
@Override
public int hashCode() {
return Objects.hash(key, count);
}
return String.
format("%s - %d", key, count
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCUxpc3Q8U3RyaW5nPiBsaXN0S2V5cyA9IG5ldyBBcnJheUxpc3Q8PihMaXN0Lm9mKCJBIiwgIkIiLCAiQyIpKTsKCiAgICAgICAgTWFwPFVzZXIsIExvbmc+IG1hcFVzZXJzID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIG1hcFVzZXJzLnB1dChuZXcgVXNlcigiQW5uaWUiLCAiQSIpLCAyM0wpOwogICAgICAgIG1hcFVzZXJzLnB1dChuZXcgVXNlcigiUGF1bCIsICJDIiksIDE2TCk7CgogICAgICAgIExpc3Q8VXNlckNvdW50PiBsaXN0UmVzID0gbGlzdEtleXMuc3RyZWFtKCkKICAgICAgICAgICAgICAgIC5tYXAoa2V5IC0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyIHVzZXIgPSBtYXBVc2Vycy5rZXlTZXQoKS5zdHJlYW0oKS5maWx0ZXIodSAtPiB1LmdldEtleSgpLmVxdWFscyhrZXkpKS5maW5kRmlyc3QoKS5vckVsc2UobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyQ291bnQoa2V5LCB1c2VyICE9IG51bGwgPyBtYXBVc2Vycy5nZXQodXNlcikgOiAwTCk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0UmVzKTsKCX0KfQoKY2xhc3MgVXNlciB7CiAgICBwcml2YXRlIFN0cmluZyBuYW1lLCBrZXk7CgogICAgcHVibGljIFVzZXIoU3RyaW5nIG5hbWUsIFN0cmluZyBrZXkpIHsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gbmFtZTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldEtleSgpIHsKICAgICAgICByZXR1cm4ga2V5OwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICBpZiAob2JqID09IHRoaXMpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChvYmouZ2V0Q2xhc3MoKSAhPSBnZXRDbGFzcygpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgVXNlciBvdGhlciA9IChVc2VyKSBvYmo7CiAgICAgICAgcmV0dXJuIE9iamVjdHMuZXF1YWxzKG5hbWUsIG90aGVyLmdldE5hbWUoKSkgJiYgT2JqZWN0cy5lcXVhbHMoa2V5LCBvdGhlci5nZXRLZXkoKSk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgIHJldHVybiBPYmplY3RzLmhhc2gobmFtZSwga2V5KTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyAtICVzIiwgbmFtZSwga2V5KTsKICAgIH0KfQoKY2xhc3MgVXNlckNvdW50IHsKICAgIHByaXZhdGUgU3RyaW5nIGtleTsKICAgIHByaXZhdGUgbG9uZyBjb3VudDsKCiAgICBwdWJsaWMgVXNlckNvdW50KFN0cmluZyBrZXksIGxvbmcgY291bnQpIHsKICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXRLZXkoKSB7CiAgICAgICAgcmV0dXJuIGtleTsKICAgIH0KCiAgICBwdWJsaWMgbG9uZyBnZXRDb3VudCgpIHsKICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgIGlmIChvYmogPT0gdGhpcykgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG9iai5nZXRDbGFzcygpICE9IGdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKICAgICAgICBVc2VyQ291bnQgb3RoZXIgPSAoVXNlckNvdW50KSBvYmo7CiAgICAgICAgcmV0dXJuIE9iamVjdHMuZXF1YWxzKGtleSwgb3RoZXIuZ2V0S2V5KCkpICYmIE9iamVjdHMuZXF1YWxzKGNvdW50LCBvdGhlci5nZXRDb3VudCgpKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdHMuaGFzaChrZXksIGNvdW50KTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyAtICVkIiwga2V5LCBjb3VudCk7CiAgICB9Cn0=