【发布时间】:2016-08-01 21:38:33
【问题描述】:
我有一个实现 Iterable 的自定义列表(不是集合!!)。我没有实现 List,因为这会带来太多我不想要的方法,而且我不需要。
关于我的 CustomList 的更多信息:
- 所有成员均为最终成员
- 每个 CustomList 都可以有一个“SubList”,它是另一个 CustomList
- 每个 CustomList 都必须有一个 MyThing
- 示例:假设 A 是 MyThing 的对象,B 是 MyThing 的对象,可以有一个只有 A 的 CustomList(我们称之为 AList)和一个带有 Item B 和 AList 作为子列表的 CustomList。
- CustomList 有一个可以接受 MyThings 数组的构造函数
这是我的班级:
public class CustomList implements Iterable<MyThing> {
private final CustomList sublist;
private final MyThing thing;
// getters and other methods
}
我有一个
Comparator<MyThing>
MyThing:
public class MyThing {
private final IntArrayList values;
// more members and methods
}
我想获得一个已排序的副本作为我的一个 CustomLists 的 CustomList(如果我不需要 Comparator 那不会是一个问题,但这就是我迄今为止解决它的方法)
到目前为止我所做的是:
- 将我的 CustomList 转换为列表
- 对该列表进行排序(使用比较器)
- 将其转移回 CustomList
这很好用,但我想知道是否有另一种(也许更优雅的方式)来实现我的目标。
【问题讨论】:
-
什么是
MyThing?它的字段和属性是什么?你的排序标准是什么? -
你能解释一下为什么你实现一个Iterable而不是扩展一些Collection吗?
-
使用 Guava 的
Ordering(扩展Comparator),你可以做到ordering.sortedCopy(iterable)。但这基本上完成了你已经在做的事情。 -
优雅的方法是让你的类实现
List而不仅仅是Iterable。你为什么选择不这样做? -
我不认为目前建议的“重复”是真正的重复。第一个没有任何意义,第二个是关于对
Iterator的元素进行排序,而不是对父Iterable本身做任何事情。