Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为地图的项目创建项目集?_Java - Fatal编程技术网

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实现