gpt4 book ai didi

java - Groovy(或 Java)中 sortedset 的子集

转载 作者:行者123 更新时间:2023-11-30 06:36:39 28 4
gpt4 key购买 nike

有一个 SortedSet,其中我需要基于列表中特定元素的特定记录片段。

例子:在下面的代码中,challengeDTO.members 是一个 SortedSet(TreeSet 实现)

我知道一个成员的位置

def memberRank = challengeDTO.members.findIndexOf { it.member.id == membership?.id} + 1

如果 memberRank 是 66,我想获得排名在 60 到 70 之间的一部分成员。

challengeDTO.members[60..69] 不会工作,因为它是一个集合

想法?建议?

成员实现:

class ChallengeMemberDTO implements Comparable<ChallengeMemberDTO> {

ChallengeMember member
Integer total
String name
String teamName

int compareTo(ChallengeMemberDTO t) {
if (total == t.total) { // the sortedset will remove duplicates based on same total, which is not desireable
return name.compareTo(t.name)
}
else {
return t.total.compareTo(total)
}
}
}

最佳答案

尝试:

(challengeDTO.members as List)[60..69]

在 Groovy 的幕后 as List类型转换创建一个 ArrayList 的实例并调用 addAll ,传递您的 SortedSet。根据 java.util.List Java文档 addAll “按照指定集合的​​迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾”。在java.util.SortedSet JavaDoc 指出“集合的迭代器将按元素升序遍历集合”。

因此列表的顺序将匹配 SortedSet 的顺序。

有兴趣的可以看看Groovy源码中的方法:

org.codehaus.groovy.runtime.DefaultGroovyMethods.asList(Collection<T> self)

编辑:

为了完整起见,在 Java 中您可以执行以下操作。这正是上面的 Groovy 代码在幕后所做的:

SortedSet<ChallendMemberDTO> memberSet = challengeDTO.getMembers();
List<ChallengeMemberDTO> membersPage = new ArrayList<ChallengeMemberDTO>(memberSet).subList(60, 70);

关于java - Groovy(或 Java)中 sortedset 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615123/

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