本篇采用示例的形式展示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'}]
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]
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]