gpt4 book ai didi

java - 根据键属性转换给定 SortedMap 的排序顺序

转载 作者:行者123 更新时间:2023-12-01 13:19:12 24 4
gpt4 key购买 nike

我有一个 SortedMap (实现是一个 TreeMap ),看起来像这样:

[ProjectOne] -> [ActivityOne,ActivityTwo,ActivityThree]
[ProjectTwo] -> [ActivityFour,ActivityFive,ActivitySix]
[ProjectThree] -> [ActivitySeven,ActivityEight,ActivityNine]
[ProjectFour] -> [ActivityTen,ActivityEleven,ActivityTwelve]

每个 Activity 都有一个项目,当前 map 按 Activity 的项目进行分组。所以 ActivityOne 有 ProjectOne,ActivityFour 有 ProjectTwo 等等。

每个项目都有一个单元。所以类看起来像这样:

class Project{
int id;
Unit unit;
}

和单元类别:

class Unit{
int id;
}

和 Activity 类:

class Activity{
int id;
Project project;
}

现在假设 ProjectOne 和 ProjectThree 具有相同的单位(假设 id = 1 ),并且 ProjectTwo 和 ProjectFour 具有相同的单位(其中 id = 2 )。我需要将我拥有的 SortedMap 转换为:

[ProjectOne] -> [ActivityOne,ActivityTwo,ActivityThree]
[ProjectThree] -> [ActivitySeven,ActivityEight,ActivityNine]
[ProjectTwo] -> [ActivityFour,ActivityFive,ActivitySix]
[ProjectFour] -> [ActivityTen,ActivityEleven,ActivityTwelve]

我的意思是,我需要根据项目元素的单位对给定 map 进行排序

所以我需要一个方法:

public SortedMap<Project,List<Activity>> sortByUnits(SortedMap<Project,List<Activity>> mapToBeSorted){
// Implementation here...
return newMapThatIsSorted;
}

我怎样才能实现这个目标?

我已经尝试了一整天,但我想我无法解决它。任何帮助表示赞赏。

最佳答案

为了正常工作,Project 需要一个附加属性,例如 id:

class Project {
String id;
Unit unit;
public Project(final String id) {
this.id = id;
}
@Override
public String toString() {
return this.id + ": unit = " + this.unit.id;
}
}

然后我们准备使用自定义比较器设置 map :

final SortedMap<Project, List<Activity>> map = new TreeMap<>(new Comparator<Project>() {
@Override
public int compare(final Project p1, final Project p2) {
final int c = Integer.valueOf(p1.unit.id).compareTo(Integer.valueOf(p2.unit.id));
if (c != 0) {
return c;
}
return p1.id.compareTo(p2.id);
}
});

如果我们不将 id 添加到 Project 并在 Comparator 中使用它,则 Project 实例将具有相同的 Unit.id 被认为是相等的。

关于java - 根据键属性转换给定 SortedMap 的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com