我有一个具有属性和构造函数的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)


现在,假设inputRange15。我试图返回这两个连续的Category对象,它们之间的categoryRange inputRange落在它们之间。在这种情况下,15位于categoryRange 1020之间。因此,将返回C1C2

同样,如果inputRange = 39,则需要返回C3C4

现在,可以通过遍历列表中的每对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是唯一的,这是一种更高级的方法,可以使用NavigableMapTreeMap作为impl)并以categoryRange作为键。代码是相似的,您不必创建搜索对象。

09-04 05:38