如果我想从固定的爱好列表中选择特定项目,该怎么办?假设我从整个列表中选择了(游泳)和(D&D)。

在里面,我想检查一下他选择了什么。我会这样做:

for (String hobby : selectedHobbiesList)
{

  if (hobby.equals("Swimming"))
  {
    return 2;
  }
  else if (hobby.equals("D&D"))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}


我想动态设置条件的数量,我知道我可以对所有的跳跃使用else if,但是在我的情况下,我希望选择的爱好数量尽可能多。

甚至有可能解决吗?!



更新

我想我无法解释我的观点,对此感到抱歉。我用一个虚拟的例子问了这个问题,因为我在处理问题上(否则),但是我不知道如何对我的真实问题应用建议的答案。
我将更清楚地解释它。



我正在尝试例如根据爱好对recyclerview中的arraylist项目进行重新排序。和前面的示例一样,我给出了两个爱好的示例。
但就我而言,爱好不是预设的。他们最多可以是8个,也可以没有!
 所以我试图使“ else if”像这样动态:

     // inside the activity class

      if (homeData.size() > 0) {

        Collections.sort(homeData,
            Collections.reverseOrder(new SortedListAdapterCallback<HomeItemModel>(adapter) {
              @Override
              public int compare(HomeItemModel o1, HomeItemModel o2) {

                if (Hawk.contains("Hobbies")) {

                  ArrayList<String> hobbiesList = Hawk.get("Hobbies");

                  for (String hobbyItem: hobbiesList ){

                    if (o1.getCategory().equals("Swimming") && item.equals("Swimming")) {
                    weight1 = 2;

                    } else if (o1.getCategory().equals("D&D") && item.equals("D&D")) {
                    weight1 = 1;

                   // I know must define all the 8 hobbies but I don't wanna make the code to long..
                    } else {
                    weight1 = 0;
                    }

                    if (o2.getCategory().equals("Swimming") && item.equals("Swimming")) {
                    weight2 = 2;

                    } else if (o2.getCategory().equals("D&D") && item.equals("D&D")) {
                    weight2 = 1;

                    } else {
                    weight2 = 0;
                    }

                  }




                  if (weight1 == weight2) {
                    return 0;
                  } else if (weight1 > weight2) {
                    return 1;
                  } else {
                    return -1;
                  }

                }
                return 0;

              }

              @Override
              public boolean areContentsTheSame(HomeItemModel oldItem, HomeItemModel newItem) {
                return false;
              }

              @Override
              public boolean areItemsTheSame(HomeItemModel item1, HomeItemModel item2) {
                return false;
              }
            }));

      }
      adapter.notifyDataSetChanged();

      // code..


但这是行不通的,它只能识别其中一个条件,因此,如果兴趣爱好数组列表包含{“ Swimming”,“ D&D”},它只会对第一个条件进行排序,而在我手动进行操作之前,它对两个条件都进行了排序!

最佳答案

使用HashMap:

HashMap map = new HashMap<String, Integer>(){
        {
            put("Other", 3);
            put("Swimming", 2);
            put("D&D", 1);
        }
    };



    for (String hobby : selectedHobbiesList) {
        if(map.containsKey(hobby)){
            return map.get(hobby);
        }else{
            return 0;
        }
    }


更新:

为什么不在您的HomeItemModel中设置权重?

class HomeItemModel{
    private int mWeight;
    private String mCat;

    HomeItemModel(String cat, int weight){
        mWeight = weight;
        mCat = cat;
    }
    public int getWeight(){
        return mWeight;
    }
    public String getCategory(){
        return mCat;
    }
    /*More code*/
}


比较器:

        @Override
        public int compare(HomeItemModel o1, HomeItemModel o2){
            //DESC order
            if(o1.getWeight() == o2.getWeight()){
                return 0;
            }else if(o1.getWeight() < o2.getWeight()){
                return 1;
            }else{
                return -1;
            }
        }


添加数据:

homeData.add(new HomeItemModel("Swimming", 1));
homeData.add(new HomeItemModel("D&D", 2));

07-28 02:14
查看更多