Guava Collections API学习之MultimapITeye - 凯发娱乐

Guava Collections API学习之MultimapITeye

2019年03月06日10时17分23秒 | 作者: 嘉懿 | 标签: 相同,男孙刚,元素 | 浏览: 1147

 

      信任咱们对Java中的Map类及其之类有大致的了解,Map类是以键值对的方式来存储元素(Key- Value),可是了解Map的人都知道,Map中存储的Key是仅有的。什么意思呢?就是假设咱们有两个key相同,但value不同的元素需求刺进到map中去,那么从前的key对应的value将会被后来的值替换掉。假如咱们需求用Map来把相同key的值存在一同,代码看起来像下面相同:

 

@Test
public void test1(){
 List Person personList = new ArrayList Person 
 Person person = new Person("孙刚1", "21", "男");
 Person person2 = new Person("孙刚2", "21", "男");
 Person person3 = new Person("孙刚3", "21", "女");
 Person person4 = new Person("孙刚4", "21", "男");
 Person person5 = new Person("孙刚5", "21", "女");
 Person person6 = new Person("孙刚6", "21", "男");
 personList.add(person);
 personList.add(person2);
 personList.add(person3);
 personList.add(person4);
 personList.add(person5);
 personList.add(person6);
 genderStatistics(personList);
//性别计算 
 public void genderStatistics(List Person personList){
 Optional List Person optionalForPerson= Optional.fromNullable(personList);
 if (!optionalForPerson.isPresent()) {
 return;
 Map String, List Person map = new HashMap String, List Person ();
 for (Person person : personList) {
 String sex = person.getSex();
 List Person persons = map.get(sex);
 if (null  persons) {//第一次参加
 persons = new ArrayList Person 
 persons.add(person);
 map.put(sex, persons);
 for(Entry String, List Person entry : map.entrySet()){
 String key = entry.getKey();
 System.out.println(key + ":" + entry.getValue()); 
 }

 

 

成果如下:

 

女:[Person [name=孙刚3, age=21, sex=女], Person [name=孙刚5, age=21, sex=女]]
男:[Person [name=孙刚1, age=21, sex=男], Person [name=孙刚2, age=21, sex=男], Person [name=孙刚4, age=21, sex=男], Person [name=孙刚6, age=21, sex=男]]

 

尽管完成了功用,可是代码比较长,可是假如你用Guava去完成相同的功用,你会发现你的代码一会儿变少了。Guava供给了下面的结构

 

import com.google.common.collect.ArrayListMultimap; 
import com.google.common.collect.Multimap; 
Multimap K, V myMultimap = ArrayListMultimap.create();

 

      从姓名能够看出,Multimap能够寄存的key值是不仅有的,Multimap并没有完成 Map 的接口,所以不需求到达键仅有的要求。假如寄存了key相同的元素,Multimap并不会掩盖曾经相同的key元素,而是加进去了。成果有点像{k1=[v1, v2, v3], k2=[v7, v8],….}其间v1, v2, v3对应的key都是k1,而假如是Map,则它的成果有点像{k1=v1, k2=v2,…}看到差异了吧?那么,用Multimap完成上面相同的功用代码有点像

Multimap String, Person myMultimap = ArrayListMultimap.create(); 
for (Person person : personList) { 
 String sex = person.getSex(); 
 myMultimap.put(sex, person);                          
			
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章