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 true Java7 引入的 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 hello Strings#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(); // 不重复元素的Set Collection - 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.0 Collection - 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 ” ©著作权归作者所有 |