Java 插入时的排序列表 @覆盖 公共集合getDishesContaining(集合成分)引发DatabaseException{ 收集结果=新建ArrayList(); for(Dish currentDish:this.getAll()){ 如果(当前包含成分的菜肴)!=0){ 结果:添加(currentDish); } } 返回结果; }
概述:Java 插入时的排序列表 @覆盖 公共集合getDishesContaining(集合成分)引发DatabaseException{ 收集结果=新建ArrayList(); for(Dish currentDish:this.getAll()){ 如果(当前包含成分的菜肴)!=0){ 结果:添加(currentDish); } } 返回结果; },java,sorting,collections,Java,Sorting,Collections,概述: 菜肴->参数:ArrayList配料 菜肴->功能:包含成分(收集成分):int (返回给定集合中包含的菜肴配料的整数百分比) 例如: 对于给定的Ingrediënt集合=[X,Y,Z] 菜肴A=[成分:[X,Y,Z]],->dishA.含有成分(IngreditCollection)=1 菜肴B=[成分:[W,X,Y,Z]],->dishB.含有成分(IngreditCollection)=0,75 菜肴C=[配料:[U,V,W]];->dishC.containsingCre
- 菜肴->参数:
ArrayList配料
- 菜肴->功能:
(返回给定集合中包含的菜肴配料的整数百分比)包含成分(收集成分):int
- 对于给定的Ingrediënt集合=[X,Y,Z]
- 菜肴A=[成分:[X,Y,Z]],->
=1dishA.含有成分(IngreditCollection)
- 菜肴B=[成分:[W,X,Y,Z]],->
=0,75dishB.含有成分(IngreditCollection)
- 菜肴C=[配料:[U,V,W]];-><代码>dishC.containsingCredition(IngCreditCollection)=0
- 菜肴A=[成分:[X,Y,Z]],->
我正在考虑编写一个集合类,在百分比的“add”函数中添加一个额外的参数。但这似乎有点牵强。我缺少什么吗?解决这个问题的干净、面向对象的方法是为您的对象实现java.lang.Comparable接口。然后,您可以使用Collections类提供的任何排序方法 我对您的规范做了一点修改:我不再使用ContainsingCredit(收集配料)方法,而是将配料的状态存储在dish对象本身中。这使它更容易与其他碟形对象进行比较 因此,上面的for循环是:
@Override
public Collection<Dish> getDishesContaining(Collection<Ingredient> ingredients) throws DatabaseException {
Collection<Dish> result = new ArrayList<>();
for (Dish currentDish : this.getAll()) {
if (currentDish.containsIngredient(ingredients)!=0) {
result.add(currentDish);
}
}
return result;
}
下面是实现Compariable的Dish类的外观:
for (Dish currentDish : this.getAll()) {
currentDish.setIngredients(ingredients);
if (currentDish.getPercentageOfIngredientsContained() != 0) {
result.add(currentDish);
}
}
import java.util.ArrayList;
导入java.lang.com;
公共类餐具{
ArrayList_=null;
int(包含的增量百分比=0);
公共数组列表getComponents(){
返回原材料;
}
公共成分(ArrayList成分){
_成分=成分;
computeIngredientsContained();
}
public int GetPercentageOfIngreentsContained(){
返回(受牵连的老年人的百分比);;
}
私有void computeIngredientsContained(){
整数百分比=0;
//通过查看_成分计算百分比。。。
// ...
// ...
_包含的未成年人百分比=百分比;
}
//实施可比
@凌驾
公共int比较(另一个Dish对象){
if(this.getPercentageOfIngredEntsContained()
通过这种方式实现的菜肴,您可以使用Collections.sort(菜肴)对任何菜肴列表进行排序,它们将按照所含成分的百分比进行排序。请注意,百分比不是参数。然后创建一个包含百分比并在其上进行比较的DishWrapper(如Anna发布的链接所示)。对DishWrapper列表进行排序后,您可以将其“展开”到普通的Dish-list中。告诉我,
currentDish.GetPercentageOfIngreentsContained()
如何计算其中的百分比?该函数的目标是计算给定的配料集合与这道菜有多少共同点。我不会为你写所有的代码…:-p试着把配料表示成一组。(java.util.HashSet)查找集合的交集。将交集中的配料数除以特定菜肴的配料总数。
import java.util.ArrayList;
import java.lang.Comparable;
public class Dish implements Comparable<Dish> {
ArrayList<Ingredient> _ingredients = null;
int _percentageOfIngredientsContained = 0;
public ArrayList<Ingredient> getIngredients() {
return _ingredients;
}
public void setIngredients(ArrayList<Ingredient> ingredients) {
_ingredients = ingredients;
computeIngredientsContained();
}
public int getPercentageOfIngredientsContained() {
return _percentageOfIngredientsContained;
}
private void computeIngredientsContained() {
int percent = 0;
// Calculate percentage by looking at _ingredients...
// ...
// ...
_percentageOfIngredientsContained = percent;
}
// Implement Comparable
@Override
public int compareTo(Dish anotherDishObject) {
if (this.getPercentageOfIngredientsContained() < anotherDishObject.getPercentageOfIngredientsContained()) {
return -1;
}
else if (this.getPercentageOfIngredientsContained() == anotherDishObject.getPercentageOfIngredientsContained()) {
return 0;
}
else {
return 1;
}
}
}