对象列表的组合
Combination of a list of objects
我有一个我无法解决的问题。
希望我能让你明白。
给定以下 Waypoint 对象列表
List<Waypoint>myWaypoint = new ArrayList<Waypoint>();
我想计算列表中 3 (k=3) 组元素的组合 无重复,并创建仅包含 k 组组合的矩阵
示例:
List<Waypoint>myWaypoint = new ArrayList<Waypoint>();
Waypoint a = new Waypoint();
Waypoint b = new Waypoint();
Waypoint c = new Waypoint();
Waypoint d = new Waypoint();
myWaypoint.add(a);
myWaypoint.add(b);
myWaypoint.add(c);
myWaypoint.add(d);
n!/(r!(n-r)!)
k = 3 n = 4 -> 组合:4
Waypoint 对象的新数组
Expected result of the matrix
目标是生成一个包含这些对象的数组
如果实现算法不是任务的一部分,我会推荐像 combinatoricslib3 这样的库,它将为您生成组合。
使用 combinatoricslib3
使用字符串的简单示例:
Generator.combination("A", "B", "C", "D")
.simple(3)
.stream()
.forEach(System.out::println);
会给你一个输出
[A, B, C]
[A, B, D]
[A, C, D]
[B, C, D]
您可以使用 lib 通过传递您的列表来生成自定义对象的组合,例如将它们收集到列表列表中。下面以一个例子作为起点:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.paukov.combinatorics3.Generator;
public class Example {
public static void main(String[] args) {
List<Waypoint> myWaypoint = new ArrayList<>();
Waypoint a = new Waypoint("a");
Waypoint b = new Waypoint("b");
Waypoint c = new Waypoint("c");
Waypoint d = new Waypoint("d");
myWaypoint.add(a);
myWaypoint.add(b);
myWaypoint.add(c);
myWaypoint.add(d);
List<List<Waypoint>> combinations = Generator.combination(myWaypoint)
.simple(3)
.stream()
.collect(Collectors.toList());
combinations.forEach(System.out::println);
}
static class Waypoint {
String name;
public Waypoint(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
}
您可能需要阅读此 post java-combinations-algorithm 以找到替代方案,例如 Apache Commons
或 Google Guava
我有一个我无法解决的问题。 希望我能让你明白。
给定以下 Waypoint 对象列表
List<Waypoint>myWaypoint = new ArrayList<Waypoint>();
我想计算列表中 3 (k=3) 组元素的组合 无重复,并创建仅包含 k 组组合的矩阵
示例:
List<Waypoint>myWaypoint = new ArrayList<Waypoint>();
Waypoint a = new Waypoint();
Waypoint b = new Waypoint();
Waypoint c = new Waypoint();
Waypoint d = new Waypoint();
myWaypoint.add(a);
myWaypoint.add(b);
myWaypoint.add(c);
myWaypoint.add(d);
n!/(r!(n-r)!)
k = 3 n = 4 -> 组合:4
Waypoint 对象的新数组
Expected result of the matrix
目标是生成一个包含这些对象的数组
如果实现算法不是任务的一部分,我会推荐像 combinatoricslib3 这样的库,它将为您生成组合。
使用 combinatoricslib3
使用字符串的简单示例:
Generator.combination("A", "B", "C", "D")
.simple(3)
.stream()
.forEach(System.out::println);
会给你一个输出
[A, B, C]
[A, B, D]
[A, C, D]
[B, C, D]
您可以使用 lib 通过传递您的列表来生成自定义对象的组合,例如将它们收集到列表列表中。下面以一个例子作为起点:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.paukov.combinatorics3.Generator;
public class Example {
public static void main(String[] args) {
List<Waypoint> myWaypoint = new ArrayList<>();
Waypoint a = new Waypoint("a");
Waypoint b = new Waypoint("b");
Waypoint c = new Waypoint("c");
Waypoint d = new Waypoint("d");
myWaypoint.add(a);
myWaypoint.add(b);
myWaypoint.add(c);
myWaypoint.add(d);
List<List<Waypoint>> combinations = Generator.combination(myWaypoint)
.simple(3)
.stream()
.collect(Collectors.toList());
combinations.forEach(System.out::println);
}
static class Waypoint {
String name;
public Waypoint(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
}
您可能需要阅读此 post java-combinations-algorithm 以找到替代方案,例如 Apache Commons
或 Google Guava