Java 如何为地图的项目创建项目集?
我有一张地图,看起来像:Java 如何为地图的项目创建项目集?,java,Java,我有一张地图,看起来像: {A=1, B=2, C=3, D=4, E=3, F=2, G=1} [A,B], [A,C], [A,D], [A,E], [A,F], [A,G], [B,C], [B,D], [B,E], [B,F], [B,G], [C,D], [C,E], [C,F], [C,G], [D,E], [D,F], [D,G], [E,F], [E,G], [F,G] 我想创建一个新列表,从上一个映射中获取一个键,并创建所有可能的与其他键的配对,并将其放入创建的列表中,使其
{A=1, B=2, C=3, D=4, E=3, F=2, G=1}
[A,B], [A,C], [A,D], [A,E], [A,F], [A,G], [B,C], [B,D], [B,E], [B,F], [B,G],
[C,D], [C,E], [C,F], [C,G], [D,E], [D,F], [D,G], [E,F], [E,G], [F,G]
我想创建一个新列表,从上一个映射中获取一个键,并创建所有可能的与其他键的配对,并将其放入创建的列表中,使其看起来像:
{A=1, B=2, C=3, D=4, E=3, F=2, G=1}
[A,B], [A,C], [A,D], [A,E], [A,F], [A,G], [B,C], [B,D], [B,E], [B,F], [B,G],
[C,D], [C,E], [C,F], [C,G], [D,E], [D,F], [D,G], [E,F], [E,G], [F,G]
对我来说,什么是一个好方法呢?不用太担心效率:
List<String> keys = new ArrayList<String>(myMap.keySet());
List<Set<String>> keyPairs = new ArrayList<>();
for (int i = 0; i < keys .size(); i++)
for (int j = i + 1; j < keys .size(); j++)
keyPairs.add(Set.of(keys[i], keys[j]))
在不太担心效率的情况下:
List<String> keys = new ArrayList<String>(myMap.keySet());
List<Set<String>> keyPairs = new ArrayList<>();
for (int i = 0; i < keys .size(); i++)
for (int j = i + 1; j < keys .size(); j++)
keyPairs.add(Set.of(keys[i], keys[j]))
使用Java 11收集方法和流:
var n = map.size();
var keys = new ArrayList<>(map.keySet());
var combinations = IntStream
.range(0, n)
.boxed()
.flatMap(i -> IntStream
.range(i + 1, n).mapToObj(j -> Set.of(keys.get(i), keys.get(j))))
.collect(Collectors.toList());
System.out.println(combinations);
[B,A]、[C,A]、[D,A]、[F,A]、[G,A]、[C,B]、[E,B]、[F,B]、[G,B]、[D,C]、[E,C]、[F,C]、[E,D]、[F,D]、[G,D]、[F,E]、[G,E]、[G,F]]
使用Java 11收集方法和流:
var n = map.size();
var keys = new ArrayList<>(map.keySet());
var combinations = IntStream
.range(0, n)
.boxed()
.flatMap(i -> IntStream
.range(i + 1, n).mapToObj(j -> Set.of(keys.get(i), keys.get(j))))
.collect(Collectors.toList());
System.out.println(combinations);
[B,A]、[C,A]、[D,A]、[F,A]、[G,A]、[C,B]、[E,B]、[F,B]、[G,B]、[D,C]、[E,C]、[F,C]、[E,D]、[F,D]、[G,D]、[F,E]、[G,E]、[G,F]]
那么所有可能的钥匙配对?@kabanus基本上是的。为了更好地澄清,我编辑了原始问题。谢谢。那么所有可能的钥匙配对呢?@kabanus基本上是的。为了更好地澄清,我编辑了原始问题。谢谢。考虑到更高的效率,可以查看com.google.common.collect.Setscombinations的guava实现。考虑到更高的效率,可以查看com.google.common.collect.Setscombinations的guava实现