我有一个具有属性和构造函数的Category
类,如下所示:
Double categoryRange;
String categoryName;
Double categoryPercent;
Category(categoryRange, categoryName, categoryPercent)
getters(), setters()...
我也有一个类别对象的linkedList,如下所示:
[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
。我试图返回这两个连续的Category
对象,它们之间的categoryRange
inputRange
落在它们之间。在这种情况下,15
位于categoryRange
10
和20
之间。因此,将返回C1
和C2
。同样,如果
inputRange
= 39
,则需要返回C3
&C4
。现在,可以通过遍历列表中的每对
Category
对象(即(C1,C2),(C2,C3),(),..
)并检查inputRange
是否落在这对对象的categoryRange
之间来完成此操作。但是我在想,是否有更好的方法可以做到这一点。
如果是这样,请让我知道如何实现。
感谢致敬。
最佳答案
使用NavigableSet,它可以使整体保持有序,您可以直接访问任何值上方和下方的元素。
假设您有categoryRange
的吸气剂:
// 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
是唯一的,这是一种更高级的方法,可以使用NavigableMap
(TreeMap
作为impl)并以categoryRange
作为键。代码是相似的,您不必创建搜索对象。