返回基于给定条件的列表元素对



我有一个类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)

现在让我们假设inputRange15。我试图返回inputRange位于其categoryRange之间的两个连续Category对象。在这种情况下,15介于categoryRange1020之间。所以C1&将返回C2

类似地,如果inputRange39C3&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(。代码是相似的,您不必创建搜索对象。

相关内容

  • 没有找到相关文章

最新更新