guava 学习一 函数,集合操作
pom
test
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </dependency>
guava
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>27.0.1-jre</version> </dependency>
一、FluentIterable
初始化数据
// 这里初始化一些测试数据 @Before public void setUp() { Girl girl1 = new Girl(17, "nice"); Girl girl2 = new Girl(18, "not so nice"); Girl girl3 = new Girl(19, "nice"); Girl girl4 = new Girl(20, "not so nice"); // 这里使用Lists.newArrayList添加对象,避免多次调用list.add方法,下篇会有说明 girls = Lists.newArrayList(girl1, girl2, girl3, girl4); } // 测试用Girl对象 static class Girl { int age; String face;
过滤 from filter
/** * from方法:用于包装Iterable接口,返回FluentIterable实例 * filter方法:用于过滤集合中元素,返回过滤后的集合 */ FluentIterable<Girl> iterable = FluentIterable.from(girls).filter(new Predicate<Girl>(){ @Override public boolean apply(@Nullable Girl input) { // 过滤相貌nice的Girl对象 return "nice".equals(input.getFace()); } }); for (Girl girl : iterable) { System.out.println(girl.toString()); // 输出 //Girl [age=17, face=nice] //Girl [age=19, face=nice] }
转换transfrom + 拼接
/** * transform方法:用于根据指定Function转换集合元素,返回转换后的集合 */ Iterable<String> fluentIterable = FluentIterable.from(girls).transform(new Function<Girl, String>() { @Override public String apply(Girl input) { //Joiner类对相应的元素内容进行拼接处理 return Joiner.on(",").join(input.getAge(), input.getFace()); } }); for (String girl : fluentIterable) { /** 打印结果: 17,nice 18,not so nice 19,nice 20,not so nice */ System.out.println(girl); }
二、List
创建新的List
LIst转换处理
ArrayList<String> newArrayList = Lists.newArrayList(); List<String> keys = Lists.newArrayList("a", "b", "c", "a"); /** * transform:根据传进来的function对fromList进行相应的处理 并将处理得到的结果存入到新的list对象中返回 */ List<String> newList = Lists.transform(keys, new Function<String, String>() { @Override public String apply(String input) { // 这里简单的对集合中的元素转换为大写 return input.toUpperCase(); } }); System.out.println(newList);// [I LOVE U, I LIKE U, I HATE U] String str = "i love u";// 测试用 String[] strs = { "i like u", "i miss u" };// 测试用
/**
* asList:返回一个不可变的List 其中包含指定的第一个元素和附加的元素数组组成 修改这个数组将反映到返回的List上
*/
List<String> list = Lists.asList(str, strs);
分割、反转
reverse
三、Map
创建、
将set转成Map
HashMap<Object, Object> mapa = Maps.newHashMap(); /** * asMap:返回一个活动的map * 键值为给定的set中的值 * value为通过给定Function计算后的值。 */ Set<String> set = Sets.newHashSet("a", "b", "c"); //Function:简单的对元素做大写转换,下面示例多次使用 Function<String, String> function = new Function<String, String>() { @Override public String apply(String input) { return input.toUpperCase(); } }; //输出:{b=B, c=C, a=A} System.out.println(Maps.asMap(set, function));
参考:https://my.oschina.net/realfighter?tab=newest&catalogId=576615