Skip to content

Instantly share code, notes, and snippets.

@lonelyleaf
Last active June 26, 2017 09:20
Show Gist options
  • Save lonelyleaf/afedfb72f490bd604f2a06afea1764fa to your computer and use it in GitHub Desktop.
Save lonelyleaf/afedfb72f490bd604f2a06afea1764fa to your computer and use it in GitHub Desktop.
to replace the fucking swith in java,reduce the code lines
import java.util.HashMap;
import java.util.Map;
/**
* replace
* Created by Rock on 2017/6/26.
*/
public class Switcher<T> {
private Map<T, Consumer<T>> mapper = new HashMap<>();
private Consumer defaults;
public Switcher<T> cases(T s, Consumer<T> consumer) {
mapper.put(s, consumer);
return this;
}
public Switcher<T> defaults(Consumer<T> consumer){
this.defaults = consumer;
return this;
}
public void trigger(T s) {
if (!mapper.containsKey(s) && defaults!=null){
defaults.call(s);
return;
}
Consumer consumer = mapper.get(s);
if (consumer != null) {
consumer.call(s);
}
}
public interface Consumer<T> {
void call(T s);
}
}
@lonelyleaf
Copy link
Author

use like this

Switcher<String> switchCarType = new Switcher<String>()
                .defaults(s -> binding.rgCarType.check(R.id.rbAll))
                .cases(CarType.BOX, s -> binding.rgCarType.check(R.id.rbBox))
                .cases(CarType.PLATE, s -> binding.rgCarType.check(R.id.rbPlate))
                .cases(CarType.SELF, s -> binding.rgCarType.check(R.id.rbSelf))
                .cases(CarType.TRACTOR, s -> binding.rgCarType.check(R.id.rbTractor))
                .cases(CarType.TRAILER, s -> binding.rgCarType.check(R.id.rbTrailer));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment