Как-то так?
public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
Map<String, Set<Proposal>> map = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
for (Proposal p : proposals) {
String key = sdf.format(p.getCreateDate());
if (!map.containsKey(key)) {
map.put(key, new HashSet<>());
}
map.get(key).add(p);
}
return map;
}
В то время как реализация C# может позволить пространства имен по умолчанию (я не знаю), спецификация XPath 1.0 не делает. Так, дайте "Atom" его собственный префикс:
nsMngr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
И измените свой XPath соответственно:
XmlNode node = atom.SelectSingleNode("//atom:entry/atom:link/app:edited", nsMngr);