Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入时的排序列表 @覆盖 公共集合getDishesContaining(集合成分)引发DatabaseException{ 收集结果=新建ArrayList(); for(Dish currentDish:this.getAll()){ 如果(当前包含成分的菜肴)!=0){ 结果:添加(currentDish); } } 返回结果; }_Java_Sorting_Collections - Fatal编程技术网

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]],->
      dishA.含有成分(IngreditCollection)
      =1

    • 菜肴B=[成分:[W,X,Y,Z]],->
      dishB.含有成分(IngreditCollection)
      =0,75

    • 菜肴C=[配料:[U,V,W]];-><代码>dishC.containsingCredition(IngCreditCollection)=0

问题

我想返回包含给定配料的所有菜肴的集合orderd,首先返回普通配料百分比最高的菜肴。
我正在考虑编写一个集合类,在百分比的“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;
    }
  }
}