链接地址:http://www.xx566.com/detail/138.html
上一篇学习Collections(一)FluentIterable中, 我们学习和使用了FluentIterable类的链式调用,以使我们的代码更具可读性,在Java开发中,我们经常需要用到各种集合结构,如List、 Set、Map等,在Guava Collections中,Guava提供了一些用于处理这些集合实例的类,并使用静态工厂方法代替构造器来创建实例,如Lists、Sets、Maps 等,接下来我们会依次学习。
Lists是Guava Collections中提供的用于处理List实例的实用类,翻开源代码,我们看到,其内部使用了静态工厂方法代替构造器,提供了许多用于List子类构造和操作的静态方法,我们简单的依次进行说明,如下:
newArrayList():构造一个可变的、空的ArrayList实例。
newArrayList(E... elements):构造一个可变的包含传入元素elements的ArrayList实例。
newArrayList(Iterable<? extends E> elements):构造一个可变的包含传入元素elements的ArrayList实例。
newArrayListWithCapacity( int initialArraySize):构造一个分配 指定空间大小的ArrayList实例。
newArrayListWithExpectedSize( int estimatedSize):构造一个期望长度为estimatedSize的ArrayList实例。
newLinkedList():构造一个空的LinkedList实例。
newLinkedList( Iterable<? extends E> elements):构造一个包含传入元素elements的LinkedList实例。
newCopyOnWriteArrayList():构造一个空的CopyOnWriteArrayList实例。
newCopyOnWriteArrayList( Iterable<? extends E> elements):构造一个包含传入元素elements的CopyOnWriteArrayList实例。
asList(@Nullable E first, E[] rest):返回一个不可变的List,其中包含指定的第一个元素和附加的元素数组组成,修改这个数组将反映到返回的List上。
asList( @Nullable E first, @Nullable E second, E[] rest): 返回一个不可变的List,其中包含指定的第一个元素、第二个元素和附加的元素数组组成,修改这个数组将反映到返回的List上。
transform( List fromList, Function<? super F, ? extends T> function):根据传进来的function对fromList进行相应的处理,并将处理得到的结果存入到新的list对象中返回。
partition(List list, int size):根据size传入的List进行切割,切割成符合要求的小的List,并将这些小的List存入一个新的List对象中返回。
charactersOf(String string)、charactersOf(CharSequence sequence):将传进来的String或者CharSequence分割为单个的字符,并存入到一个ImmutableList对象中返回。 (ImmutableList:一个高性能、不可变的、随机访问列表的实现 )
reverse(List list):返回一个传入List内元素倒序后的List。
接下来,我们通过下面的示例代码,来继续加深对Lists的理解,代码如下:
/**
* Lists:处理List实例的实用类
* User: Realfighter
* Date: 2014/8/31
* Time: 22:45
*/
public class ListsTest {
@Test
public void testLists() {
/**
* 一些构造List实例的方法很简单
* 如:newArrayList(),newLinkedList()等
* 这里不再赘述
*/
String str = "i love u";//测试用
String[] strs = {"i like u", "i miss u"};//测试用
/**
* asList:返回一个不可变的List
* 其中包含指定的第一个元素和附加的元素数组组成
* 修改这个数组将反映到返回的List上
*/
List<String> list = Lists.asList(str, strs);
System.out.println(list); //[i love u, i like u, i miss u]
strs[1] = "i hate u";//对strs数组的修改会反映到List中
System.out.println(list);//[i love u, i like u, i hate u]
/**
* transform:根据传进来的function对fromList进行相应的处理
* 并将处理得到的结果存入到新的list对象中返回
*/
List<String> newList = Lists.transform(list, 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]
/**
* partition:根据size传入的List进行切割,切割成符合要求的小的List
* 并将这些小的List存入一个新的List对象中返回
*/
List<List<String>> lists = Lists.partition(list, 2);
System.out.println(lists);//[[i love u, i like u], [i hate u]]
/**
* charactersOf:将传进来的String或者CharSequence分割为单个的字符
* 并存入到一个ImmutableList对象中返回
* ImmutableList:一个高性能、不可变的、随机访问列表的实现
*/
ImmutableList<Character> characters = Lists.charactersOf("realfighter");
System.out.println(characters);//[r, e, a, l, f, i, g, h, t, e, r]
/**
* reverse:返回一个传入List内元素倒序后的List
*/
List<String> reverse = Lists.reverse(list);
System.out.println(reverse);//[i hate u, i like u, i love u]
}
}