如果我想从固定的爱好列表中选择特定项目,该怎么办?假设我从整个列表中选择了(游泳)和(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));