- 浏览: 59208 次
- 性别:
- 来自: 成都
最新评论
文章列表
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(); ...