. Sanırım iki seçeneğin var.
java-8 kullanıyorsanız, yalnızca giriş kümesinin üzerine akıtın ve girişleri groupingBy
ve reduce
ile yeni bir haritaya toplayın.
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.reducing;
...
Map<Integer, Integer> map =
multimap.entries()
.stream()
.collect(groupingBy(Map.Entry::getKey,
reducing(1, Map.Entry::getValue, (a, b) -> a * b)));
groupingBy
Tahmin edebileceğiniz gibi, onların anahtar değerleriyle olacak grup girişleri. Daha sonra, gruplandırılmış değerleri (Entry<Integer, Integer>
) ilk önce değerlerini haritalayarak ve son olarak bunları çarparak - çarpma için 1 olan kimlik değerini sağlayarak azaltırız. Eğer java-8 kullanamıyorsanız
, sen
Multimaps.asMap
ile senin
Multimap
bir
Map<Integer, Collection<Integer>>
geri almak ve
Maps.transformValues
kullanabilirsiniz:
Map<Integer, Collection<Integer>> tempMap = Multimaps.asMap(oldMap);
Map<Integer, Integer> newMap =
Maps.transformValues(tempMap, new Function<Collection<Integer>, Integer>() {
@Nullable
@Override
public Integer apply(Collection<Integer> input) {
//do the multiplication here
return 0;
}
});
. Bir deneyecek! –
** Maalesef bu kod çalışmıyor. Lütfen, kendinize bir bakın. ** –
@DenisKulagin, örneğin –