如何处理(否则如果)动态条件

时间:2017-09-14 12:55:46

标签: java android for-loop if-statement conditional-statements

如果我想从固定的爱好列表中选择某个项目作为示例,该怎么办?我们假设我从整个列表中选择(游泳)和(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进行所有的跳跃,但在我的情况下,我想要选择多少爱好的条件..!

是可能的,还是有解决方法。!

更新

我认为我没有成功解释我的观点,对不起......!我用一个虚拟的例子问了这个问题,因为我遇到了处理问题(否则如果)..但我不知道如何应用建议的答案和我真正的问题..! 我将更清楚地解释它。

我正试图以兴趣爱好的方式对再循环视图中的arraylist项目进行重新排序。我举了两个爱好的例子,就像前面的例子一样。 但在我的情况下,业余爱好不是预设的..!他们可以达到8或没有!  所以我试着让“其他如果”这样动态:

     // 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..

但这不起作用,它只识别其中一个条件,所以如果爱好arraylist包含{“游泳”,“D&amp; D”}它只对第一个进行排序,但之前当我手动进行时它是排序两个!

2 个答案:

答案 0 :(得分:1)

使用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));

答案 1 :(得分:0)

据我所知,你想知道什么是选择。我会使用一个简单的switch-case语句:

for(String hobby : selectedHobbiesList) {
    switch(hobby) {
        case "Swimming":
        // Do something here
        break;
        case "D&D":
        // Do something here 
        break;
        ...
    }