【发布时间】:2021-08-17 18:28:57
【问题描述】:
我想将键值对
- 按数据对象中的分数对每个键(组)的值(列表中)进行排序,并
- 如果地图的大小大于 n(例如 n = 3) - 然后根据第一项的(值)分数对键(组)进行排序并返回 3。 - 相当于说获得前 3(每个中的 1组)基于高分
我希望每组(A、B、C、D)得到 1 个结果
import java.util.ArrayList;
public class MyClass {
public static void main(String args[]) {
// output should be just Data(17.0, "five", "D"), Data(4.0, "two", "A"), Data(3.0, "three", "B")
ArrayList<Data> dataList = new ArrayList<Data>();
dataList.add(new Data(1.0, "one", "A"));
dataList.add(new Data(4.0, "two", "A"));
dataList.add(new Data(3.0, "three", "B"));
dataList.add(new Data(2.0, "four", "C"));
dataList.add(new Data(7.0, "five", "D"));
dataList.add(new Data(17.0, "five", "D"));
// output should be just Data(5.0, "six", "A"), Data(3.14, "two", "B"), Data(3.14, "three", "C")
ArrayList<Data> dataList2 = new ArrayList<Data>();
dataList2.add(new Data(3.0, "one", "A"));
dataList2.add(new Data(5.0, "six", "A"));
dataList2.add(new Data(3.14, "two", "B"));
dataList2.add(new Data(3.14, "three", "C"));
System.out.println("data 1= " + dataList.size());
System.out.println("data 2 = " + dataList2.size());
}
static class Data {
double score;
String name;
String group;
public Data(double score, String name, String group) {
score = this.score;
name = this.name;
group = this.group;
}
public String getName() {
return name;
}
public String getGroup() {
return group;
}
public double getScore() {
return score;
}
}
}
我知道执行此操作的程序方式,但在 Java 8 中是否有更智能/更实用的方式来执行此操作?
【问题讨论】:
-
您在问题中提到的地图与您想要的结果有什么关系?我只能看到你对一个列表进行排序并输出具有最大属性值的 n 个元素。
-
@Eritrean 抱歉更新了问题。我正在寻找每组 1 个结果(A、B、C、D)
-
我不明白。您说“键值对
”,但“{"A", one, 3.0}" 没有列表。它看起来像一个列表本身或一个数组,但关键在哪里?您能否编辑您的问题,以便清楚“以下键值对”应该如何结束。哪个是关键,哪个是价值? -
请提供更多细节。显示前后(想要的结果),地图大于n
n是什么?{"E", five, 2.1},在你的代码中在哪里? -
@WJS 更新了这个问题。很抱歉造成混乱
标签: java java-8 priority-queue treemap treeset