|
|
|||||||||||||||||||||
|
What's Guava Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 很多类似 Apache Common 的功能,但实现更优雅,项目也更活跃。 试图弥补 Java 语言的不足,很多特性被加入到最新的 Java 语言规范中。 Objects#equal Objects.equal("a", "a"); // return true
Objects.equal(null, "a"); // return false
Objects.equal("a", null); // return false
Objects.equal(null, null); // return trueJava7 引入的 Objects 类提供了一样的方法 Objects.equals。 Objects#hashCode public int hashCode() {
return Objects.hashCode(firstName, lastname, address);
}Java7 引入的 Objects 类提供了一样的方法 Objects.hash(Object...)。 Objects#toString public String toString() {
return Objects.toStringHelper(this)
.add("firstName", firstName)
.add("lastName", lastName)
.add("age", age)
.toString();
}高版本的 Guava 里的 toStringHelper 方法移到了 MoreObjects 里了。 Comparable public int compareTo(User that) {
return CComparisonChain.start()
.compare(this.firstName, that.firstName)
.compare(this.lastName, that.lastName)
.compare(this.age, that.age)
.compareFalseFirst(this.locked, that.locked)
.result();
}PreConditions //Preconditions.checkNotNull(arg1, "参数 arg1 不正确,不能为空。"); checkNotNull(arg1, "参数 arg1 不正确,不能为空。"); checkArgument(arg2 > 18, "参数 arg2 不正确,值是%s,必须大于18。", arg2);
Optional#or String username = null;
// String name = username != null ? username ? "游客";
// String name = Objects.firstNonNull(username, "游客");
String name = Optional.of(username).or("游客");
System.out.println(name + "你好!"); // 游客你好!相当于 JavaScript 中: var a = x || y; Return null — What's mean? // 可能会返回 null
User user = User.getUserByName("tom");
if(user != null) {
user.doSomething();
} else {
admin.doSomething();
}// 可能会返回 null
Optional<User> user = User.getUserByName("tom");
user.or(admin).doSomething();Java8 里提供了 Optional:http://blog.jhades.org/java-8-how-to-use-optional/ Strings#split Iterable<String> strs = Splitter.on(",")
.trimResults()
.omitEmptyStrings()
.split(",a,, b,");
System.out.println(strs); // [a, b]Strings#utils Strings.padStart("521", 5, '0'); // 00521
Strings.padEnd("33", 4, '#'); // 33##
Strings.repeat("hello ", 3); // hello hello helloStrings#join Joiner.on(",")
.skipNulls()
.join(new String[] {"1", "5", null, "7"});
// return "1,5,7"CharMatcher // 移除 control 字符 CharMatcher.JAVA_ISO_CONTROL.removeFrom(string); // 只保留数字字符 CharMatcher.DIGIT.relationFrom(string); // 去除两端的空格, 并把中间的连续空格替换成单个空格 CharMatcher.WHITESPACE.trimAndCollapseFrom(string, ' '); // 用*号替换所有数字 CharMatcher.JAVA_DIGIT.replaceFrom(string, '*'); // 只保留数字和小写字母 CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom(string); // returns "constantName" CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME"); Collection - Multiset Multiset<String> votes =HashMultiset.create();
votes.add("张三");
votes.add("李四");
votes.add("张三");
int count = votes.count("张三"); // 返回2
Set<String> strings = votes.elementSet(); // 不重复元素的SetCollection - Multimap Multimap<String, String> tags = ArrayListMultimap.create();
tags.put("《红楼梦》", "好看");
tags.put("《红楼梦》", "有内容");
tags.put("《红楼梦》", "价格太贵");
tags.put("《水浒》", "打打杀杀");结构相当于Map<String, List Collection - Bimap BiMap<String, String> couple = HashBiMap.create();
couple.put("梁山伯", "祝英台");
couple.put("罗密欧", "朱丽叶");
couple.inverse().get("朱丽叶"); // 返回 罗密欧
couple.put("马文才", 祝英台"); // 抛出 IllegalArgumentException 异常Collection - Table Table<String, String, Double> table = HashBasedtable.create();
table.put("张三", "数学", 95.0);
table.put("张三", "语文", 88.5);
table.put("李四", "数学", 90.0);
table.put("李四", "语文", 92.0);
table.get("张三", "数学"); // 返回 95.0Collection - utils // Java7 里的 List<String> list = new ArrayList<>();
List<String> list1 = Lists.newArrayList();
List<String> list2 = Lists.newArrayList("alpha, "beta", gamma");
List<String> list3 = Lists.newArrayListWithExpectedSize(100);List countUp = Ints.asList(1, 2, 3, 4, 5);
List countDown = Lists.reverse(countUp); // {5, 4, 3, 2, 1}
List<List> parts = Lists.partition(countUp, 2); // {{1,2}, {3,4}, {5}}Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
Map<String, Integer> right = ImmutableMap.of("b", 2, "d", 4);
MapDifference<String, Integer> diff = Maps.difference(left, right);
diff.entriesInCommon(); // {"b" => 2}
diff.entriesOnlyOnLeft(); // {"a" => 1, "c" => 3}
diff.entriesOnlyOnRight(); // {"d" => 4}Collection - Fuctional boolean hasYoung = Iterables.any(users, new Predicate<User>() {
@Override
public boolean apply(@Nullable User user) {
return user.getAge() < 18;
}
});
boolean hasYoung = Iterables.all(users, new Predicate<User>() {
@Override
public boolean apply(@Nullable User user) {
return user.getSex() == MALE;
}
});
boolean hasYoung = Iterables.find(users, new Predicate<User>() {
@Override
public boolean apply(@Nullable User user) {
return "Tom".equals(user.getName());
}
});
boolean hasYoung = Iterables.removeIf(users.iterator(), new Predicate<User>() {
@Override
public boolean apply(@Nullable User user) {
return user.getAge() > 80;
}
});Java8 Stream API Optional<String> reduced = stringCollection .stream() .sorted() .reduce((s1, s2) -> s1 + "#" + s2); reduced.ifPresent(System.out::println); // "aaa1#aaa2#bbb1#bbb2#bbb3#ccc#ddd1" Supplier static Supplier<DateAndDuration> yearEndSupplier;
static {
Supplier<DateAndDuration> supplier = new Supplier<DateAndDuration>() {
@Override
public DateAndDuration get() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
calendar.clear();
calendar.set(year, 11, 31, 23, 59, 59);
long duration =calendar.getTimeInMills() - new Date().getTime();
return new dateAndDuration(calendar.getTime(), duration);
}
};
yearEndSupplier = Suppliers.memoizeWithException(supplier, supplier.get()
.getDuration(), TimeUnit.MICROSECONDS);
}
public static Date getYearEnd() {
return yearEndSupplier.get().getDate();
}Java8 中引入了 Supplier 接口:http://www.byteslounge.com/tutorials/java-8-consumer-and-supplier Cache witerCache = CacheBuilder.newBuilder()
.maximumSize(this.fileCacheSize).removalListener((RemovalListener) {
try {
objectObjectRemovalNotification.getValue().flush();
objectObjectRemovalNotificaiont.getValue().close();
if(log.isDebugEnabled()) {
log.debug("释放文件写入的write。");
}
} catche(IOException e) {
log.error("关闭文件出错", e);
}
}).build();Other Math – 最大公约数、各种舍入、指数计算等等 IO – 文件拷贝、URL 访问、遍历文件目录等等 EventBus / 多线程 / Range 转载请并标注: “本文转载自 linkedkeeper.com ” ©著作权归作者所有 |
|||||||||||||||||||||