本文共 2157 字,大约阅读时间需要 7 分钟。
本章节主要介绍以下几个接口和类:
public interface Function{ T apply(F input); boolean equals(Object object); }
下面示例是使用java.util.Date类实例作为输入,输出字符串类型的时间:
public class DateFormatFunction implements Function{ @Override public String apply(Date input) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy"); return dateFormat.format(input); } }
上面是使用实现接口的方式,也可以使用匿名内部类的方式,如下:
Functionfunction = new Function () { @Override public String apply( Date input) { return new SimpleDateFormat("dd/mm/yyyy").format(input); } };
public class State { private String name; private String code; private SetmainCities = new HashSet (); }
假想现在有一Map<String, State> stateMap, 其中的String代表这个州的缩写名。则使用Functions.forMap方法把其转换成Function,并根据apply方法输入具体的州别名,即可获取其州对象,代码如下:
Functionlookup = Functions.forMap(stateMap); //Would return State object for NewYork lookup.apply("NY");
注意:如果使用apply方法时,州的别名不存在时,会抛出IllegalArgumentException异常。
2、 Functions.compose 定义City的对象,如下:public class City { private String name; private String zipCode; private int population; public String toString() { return name; } }
有这样的一种情形,给定一个州,返回该州的主要城市名的字符串,各城市名以英文逗号分隔,这种情况下的Function类似以下:
public class StateToCityString implements Function{ @Override public String apply(State input) { return Joiner.on(",").join(input.getMainCities()); } }
更进一步,现在要求给定一州的别名,要求返回该州的主要城市的字符串,这时候Functions.compose可以派上用场了:
Functionlookup = Functions.forMap(stateMap); Function stateFunction = new StateToCityString(); Function composed = Functions.compose(stateFunction ,lookup);
我们只需要使用composed.apply("NY"),就会返回字符串:"Albany,Buffalo,NewYorkCity"。
作者:Viking_Den 链接:https://www.jianshu.com/p/68381e3d3ccc 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。