私はオブジェクトの大きなリストを2つの属性でグループ化しようとしています。私が何を意味するかを実証するために、次の例を考えてみましょう。1回の反復で2つの属性でオブジェクトのリストをグループ化するにはどうすればよいですか?
public class Foo {
private String attributeA;
private String attributeB;
private String anotherAttribute;
}
私はグループに属性attributeA
とattributeB
によってFoo
オブジェクトの大規模なリストが欲しいです。現在私は以下のことをしています。
List<Foo> foos = getFoos();
Map<Set<String>, List<String>> groupedFoos = Sets.newHashMap();
Set<String> fooGroup;
for(Foo foo : foos) {
fooGroup = Sets.newHashMap(foo.getAttributeA(), foo.getAttributeB());
if (!groupedFoos.containsKey(fooGroup)) {
groupedFoos.put(fooGroup, Lists.newArrayList(foo));
} else {
groupedFoos.get(fooGroup).add(foo);
}
}
どのように私はMap<Set<String>, List<String>>
ようMap
を使用せずに同じ結果を達成することができますか?これを1回の繰り返しで行うことが重要です。属性attributeA
とattributeB
の値を入れ替えることができます。したがってをMap
のキーとして使用することもできません。
よう
Collectors.groupingBy()
メソッドを使用していることを使用します地図のキー?あるいは単に 'Sets.newHashMap()'を使用して、属性をあらかじめソートしてください。 –また、ハッシュコードをオーバーライドすることもできません。この場合、エンティティを変更することはできません。私は彼らにアクセスできないので。 – Javiator
@maraca私はソートしたくない、私はちょうど2つのパラメータでグループ化したい。 – Javiator