本篇采用示例的形式展示Guava的常见工具应用.

Guava集合排序

示例代码

List<Integer> list = Arrays.asList(1, 2, 6, 7, 11, 9, 10, 4);
System.out.println("原始集合:" + list);
// 有空元素放置到最后
System.out.println("自然正序:" + Ordering.natural().nullsLast().sortedCopy(list));
// 按照自然排序然后翻转, 有空元素排到最后
System.out.println("自然逆序:" + Ordering.natural().reverse().nullsLast().sortedCopy(list));
// 获取集合最大元素
System.out.println("最小元素:" + Ordering.natural().max(list));
// 获取集合元素中最大的3个元素
System.out.println("最大元素:" + Ordering.natural().greatestOf(list, 3));
// 获取集合最小元素
System.out.println("最小元素:" + Ordering.natural().min(list));
// 获取集合元素中最小的3个元素
System.out.println("最小元素:" + Ordering.natural().leastOf(list, 3));

执行输出

原始集合:[1, 2, 6, 7, 11, 9, 10, 4]
自然正序:[1, 2, 4, 6, 7, 9, 10, 11]
自然逆序:[11, 10, 9, 7, 6, 4, 2, 1]
最小元素:11
最大元素:[11, 10, 9]
最小元素:1
最小元素:[1, 2, 4]

示例代码

public static void main(String[] args) {
    List<User> list = Arrays.asList(new User(1, "Abc"), new User(3, "BAb"), new User(2,"zbc"), new User(4,"fac"));
    System.out.println("原始集合:" + list);
 
    Ordering<User> natureAgeAscOrdering = Ordering.natural().nullsFirst().onResultOf(new Function<User, Integer>() {
        public Integer apply(User input) {
            return input.getAge();
        }
    });
    System.out.println("年龄升序:" + natureAgeAscOrdering.sortedCopy(list));
 
    Ordering<User> natureNameAscOrdering = Ordering.natural().nullsFirst().onResultOf(new Function<User, String>() {
        public String apply(User input) {
            return input.getName();
        }
    });
    System.out.println("姓名升序:" + natureNameAscOrdering.sortedCopy(list));
}
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class User{
    private int age;
    private String name;
 
    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\\'' +
                '}';
    }
}

执行输出

原始集合:[User{age=1, name='Abc'}, User{age=3, name='BAb'}, User{age=2, name='zbc'}, User{age=4, name='fac'}]
年龄升序:[User{age=1, name='Abc'}, User{age=2, name='zbc'}, User{age=3, name='BAb'}, User{age=4, name='fac'}]
姓名升序:[User{age=1, name='Abc'}, User{age=3, name='BAb'}, User{age=4, name='fac'}, User{age=2, name='zbc'}]

Guava集合过滤&转换

示例代码

List<String> list = Lists.newArrayList("a", "A", "1", "B", "as");
Collection<String> filter = Collections2.filter(list, new Predicate<String>() {
    public boolean apply(String s) {
        return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(s);
    }
});
System.out.println("集合过滤:" + filter);
 
Collection<String> transform = Collections2.transform(list, new Function<String, String>() {
    public String apply(String s) {
        return s.toUpperCase();
    }
});
System.out.println("集合转换:" + transform);

执行输出

集合过滤:[A, B]
集合转换:[A, A, 1, B, AS]

Guava集合切分

示例代码

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
List<List<Integer>> segmentList = Lists.partition(list, 4);
for(List<Integer> segment: segmentList){
   System.out.println(segment);
}

执行输出

[1, 2, 3, 4]
[5, 6, 7]