2

I have this if statements that check the ID of a sport and set an Image according to the sport. but I am curious if there is a more simple and shorter way to implement this. Thank you for the time and answers!

if (sport.equals("1")) {
    sportImg.setImageResource(R.drawable.fudbal);
} else if (sport.equals("2")) {
    sportImg.setImageResource(R.drawable.hokej);
} else if (sport.equals("3")) {
    sportImg.setImageResource(R.drawable.basketball);
} else if (sport.equals("4")) {
    sportImg.setImageResource(R.drawable.tenis);
} else if (sport.equals("5")) {
    // sportImg.setImageResource(R.drawable.handball);
} else if (sport.equals("6")) {
    // sportImg.setImageResource(R.drawable.mlb);
} else if (sport.equals("7")) {
    sportImg.setImageResource(R.drawable.odbojka);
} else if (sport.equals("8")) {
    sportImg.setImageResource(R.drawable.ragbi);
} else if (sport.equals("9")) {
    // sportImg.setImageResource(R.drawable.formula);
} else if (sport.equals("10")) {
    // sportImg.setImageResource(R.drawable.moto);
} else if (sport.equals("11")) {
    sportImg.setImageResource(R.drawable.vaterpolo);
} else if (sport.equals("12")) {
    // sportImg.setImageResource(R.drawable.boks);
} else if (sport.equals("13")) {
    sportImg.setImageResource(R.drawable.futsal);
} else if (sport.equals("14")) {
    // sportImg.setImageResource(R.drawable.tenis);
} else {
    sportImg.setImageAlpha(0);
}
archi noris
  • 39
  • 2
  • 6

1 Answers1

1

In this case you can use Map<String, Integer> to simplify if..else statements:

Map<String, Integer> mapImages = new HashMap<>();

mapImages.put("1", R.drawable.fudbal);
mapImages.put("2", R.drawable.hokej);
// mapImages.put(...

Integer imageId = mapImages.get(sport);
if (imageId != null) {
    sportImg.setImageResource(imageId);
} else {
    sportImg.setImageAlpha(0);
}

Or you can use Map<String, Runnable> to do some stuff for each key:

Map<String, Runnable> mapActions = new HashMap<>();

mapActions.put("1", () -> System.out.println("Action 1"));
mapActions.put("2", () -> System.out.println("Action 2"));

Runnable defaultAction = () -> System.out.println("Default action");

mapActions.getOrDefault("1", defaultAction).run(); // Action 1
mapActions.getOrDefault("2", defaultAction).run(); // Action 2
mapActions.getOrDefault("3", defaultAction).run(); // Default action

Or you can use plain old Java strings in switch statements:

String typeOfDay;
switch (dayOfWeekArg) {
    case "Monday":
        typeOfDay = "Start of work week";
        break;
    case "Tuesday":
    case "Wednesday":
    case "Thursday":
        typeOfDay = "Midweek";
        break;
    case "Friday":
        typeOfDay = "End of work week";
        break;
    case "Saturday":
    case "Sunday":
        typeOfDay = "Weekend";
        break;
    default:
        throw new Exception("Invalid day of the week: " + dayOfWeekArg);
}