我有一个类Category
,它的属性和构造函数如下:
Double categoryRange;
String categoryName;
Double categoryPercent;
Category(categoryRange, categoryName, categoryPercent)
getters(), setters()...
我还有一个链接的Category对象列表,比如:
[C1,C2,C3,C4]
where
C1 = new Category(10,"Music",20);
C2 = new Category(20,"Short Films",40)
C3 = new Category(30,"Films",75)
C4 = new Category(40,"MNM",3)
现在让我们假设inputRange
是15
。我试图返回inputRange
位于其categoryRange
之间的两个连续Category
对象。在这种情况下,15
介于categoryRange
、10
和20
之间。所以C1
&将返回C2
。
类似地,如果inputRange
=39
、C3
&C4
需要返回。
现在,这可以通过在列表中的每对Category
对象(即(C1,C2),(C2,C3),(),..
(上迭代并检查inputRange
是否落在对的categoryRange
之间来完成。
但我想知道,是否有更好的方法。
如果是的话,一定要让我知道这是怎么可能的。
谢谢和问候。
使用NavigableSet,它可以保持entires的顺序,并且您可以直接访问任何值上方和下方的元素。
假设您有categoryRange
:的getter
// Declare the set and how to order its elements
NavigableSet<Category> set = new TreeSet<>(Comparator.comparing(Category::getCategoryRange));
Category C1 = new Category(10D, "Music", 20D);
Category C2 = new Category(20D, "Short Films", 40D);
Category C3 = new Category(30D, "Films", 75D);
Category C4 = new Category(40D, "MNM", 3D);
set.add(C1);
set.add(C2);
set.add(C3);
set.add(C4);
// Create a category object with the targe range value
Category search = new Category(15D, null, null);
// Voila!
Category below = set.floor(search);
Category above = set.ceiling(search);
有一种更理想的方法,假设categoryRange
是唯一的,可以使用以categoryRange
为密钥的NavigableMap
(TreeMap
作为impl(。代码是相似的,您不必创建搜索对象。