`
文章列表
...
...
guava不可变集合ImmutableList:
...
这个类专门针对iterable封装了许多方法。主要用于过滤集合。 用法举例: public static void main(String[] args) { Person person = new Person("person1", 12); Person person2 = new Person("person2", 8); List<Person> persons = Lists.newArrayList(person,person2); Iterable<Person> iterable = F ...
Supplier用于创建对象。 public interface Supplier<T> { T get(); } google为我们提供的supplier的实现为Suppliers. 比较有意思的方法为: static class MemoizingSupplier<T> implements Supplier<T>, Serializable { final Supplier<T> delegate; transient volatile boolean initialized; // " ...
predicate主要用于过滤数据下面是predicate接口: public interface Predicate<T> { @CanIgnoreReturnValue boolean apply(@Nullable T input); boolean equals(@Nullable Object object); } 很明显predicate返回boolean值,然后用户根据boolean来过滤数据。 Google为predicate提供的实现为predicates
先上guavaFunction的接口: public interface Function<F, T> { T apply(@Nullable F input); boolean equals(@Nullable Object object); } 该接口提供两个方法,一个是apply,一个是equals.apply方法接受一个input参数返回T。 该接口主要用于转换函数。给 ...
guava ComparisonChain源码的实现十分精妙,用到了利用内部类实现单例设计模式以及利用状态设计模式。代码十分优雅。 上源码欣赏: public abstract class ComparisonChain {   //构造函数私有 单例模式   private ComparisonChain() {}   /**    * Begins a new chained comparison statement. See example in the class    * documentation.    */   public static ComparisonChain st ...
Objects主要用来重写toString和HashCode方法。里面还有一个方法firstNonNull(T, T)返回两个值中不为null的一个如果都位null.抛出空指针异常。 上代码看用法: import com.google.common.base.Objects; public class ObjectsLearn { private Integer id; private String name; private String address; public ObjectsLearn(Integer id, String name, String a ...
Spliter和MapSpliter跟Joiner以及MapJoiner功能正好相反。 用法举例: Splitter splitter = Splitter.on(","); splitter.trimResults(); List<String> aaaa = splitter.splitToList(a); Map<String,String> maps = Maps.newHashMap(); maps.put("id", "1"); maps.put("n ...
guava joiner主要用于字符串的拼接:传统的假如我们想要拼接一个list以某个分割符分割我们自己编程大概代码如下: public static String concatString(List<String> lists,String delimiter){ StringBuilder builder = new StringBuilder(); for(String s : lists){ if(s!=null){ builder.append(s).append(delimiter); } } builder.setLe ...
直接上代码: public abstract class AnnotionMapper<T> implements Comparable<AnnotionMapper<T>>{ private Type _type; public AnnotionMapper() { Type superClass = getClass().getGenericSuperclass();// 获取该类的直接超类 _type = ((ParameterizedType) superClass).getActualTypeArguments()[0]; ...
1、为什么会有设计模式?在软件开发中,唯有变是唯一的真理。唯有变是永远不变的。 2、设计原则:       1、找出应用中可能变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。简单来讲即,分离变化。 ...
状态设计模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。将动作委托到代表当前状态的类。行为会随着内部状态而改变。状态模式的类图和策略模式一模一样。但是两者的用法不同。使用状态设计模式会导致设计的类的数量会大大增加。 一个不太恰当的代码实现: public class StateMain { //状态接口 State beginState; State endState; public void begin(){ beginState.begin(); } public void end(){ endState.end(); ...
Global site tag (gtag.js) - Google Analytics