MultiMaps
来源:互联网 发布:知乎 西宁餐饮 编辑:程序博客网 时间:2024/05/08 16:30
/**
*
*/
package test;
import java.util.Map;
import org.junit.Test;
import com.google.common.base.Function;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
import com.google.common.collect.TreeMultimap;
import com.google.common.primitives.Ints;
/**
* @author Andypan
* @MultiMapsTest.java
* @{describe}
* @date 2017年7月25日 下午10:51:20
*/
public class MultiMapsTest
{
public static void main(String[] args)
{
// Multimaps
// Multimaps提供了若干值得单独说明的通用工具方法
// index
// 作为Maps.uniqueIndex的兄弟方法,Multimaps.index(Iterable,
// Function)通常针对的场景是:有一组对象,它们有共同的特定属性,我们希望按照这个属性的值查询对象,但属性值不一定是独一无二的。
// 比方说,我们想把字符串按长度分组。
ImmutableSet digits = ImmutableSet.of("zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine");
Function<String, Integer> lengthFunction = new Function<String, Integer>() {
public Integer apply(String string)
{
return string.length();
}
};
ImmutableListMultimap<Integer, String> digitsByLength = Multimaps.index(digits, lengthFunction);
System.out.println(digitsByLength);
// {4=[zero, four, five, nine], 3=[one, two, six], 5=[three, seven,
// eight]}
}
@Test
public void test2()
{
// invertFrom
// 鉴于Multimap可以把多个键映射到同一个值也可以把一个键映射到多个值,反转Multimap也会很有用。Guava
// 提供了invertFrom(Multimap toInvert,
// Multimap dest)做这个操作,并且你可以自由选择反转后的Multimap实现。
// 注:如果你使用的是ImmutableMultimap,考虑改用ImmutableMultimap.inverse()做反转。
ArrayListMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.putAll("b", Ints.asList(2, 4, 6));
multimap.putAll("a", Ints.asList(4, 2, 1));
multimap.putAll("c", Ints.asList(2, 5, 3));
TreeMultimap<Integer, String> inverse = Multimaps.invertFrom(multimap, TreeMultimap.create());
// {1=[a], 2=[a, b, c], 3=[c], 4=[a, b], 5=[c], 6=[b]}
System.out.println(inverse);
}
@Test
public void test3()
{
// 想在Map对象上使用Multimap的方法吗?forMap(Map)把Map包装成SetMultimap。
//这个方法特别有用,例如,与Multimaps.invertFrom结合使用,可以把多对一的Map反转为一对多的Multimap。
Map<String, Integer> map = ImmutableMap.of("a", 1, "b", 1, "c", 2);
SetMultimap<String, Integer> multimap = Multimaps.forMap(map);
System.out.println(multimap);
// multimap:{a=[1], b=[1], c=[2]}
Multimap<Integer, String> inverse = Multimaps.invertFrom(multimap, HashMultimap.create());
System.out.println(inverse);
// {1=[a, b], 2=[c]}
}
}
*
*/
package test;
import java.util.Map;
import org.junit.Test;
import com.google.common.base.Function;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
import com.google.common.collect.TreeMultimap;
import com.google.common.primitives.Ints;
/**
* @author Andypan
* @MultiMapsTest.java
* @{describe}
* @date 2017年7月25日 下午10:51:20
*/
public class MultiMapsTest
{
public static void main(String[] args)
{
// Multimaps
// Multimaps提供了若干值得单独说明的通用工具方法
// index
// 作为Maps.uniqueIndex的兄弟方法,Multimaps.index(Iterable,
// Function)通常针对的场景是:有一组对象,它们有共同的特定属性,我们希望按照这个属性的值查询对象,但属性值不一定是独一无二的。
// 比方说,我们想把字符串按长度分组。
ImmutableSet digits = ImmutableSet.of("zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine");
Function<String, Integer> lengthFunction = new Function<String, Integer>() {
public Integer apply(String string)
{
return string.length();
}
};
ImmutableListMultimap<Integer, String> digitsByLength = Multimaps.index(digits, lengthFunction);
System.out.println(digitsByLength);
// {4=[zero, four, five, nine], 3=[one, two, six], 5=[three, seven,
// eight]}
}
@Test
public void test2()
{
// invertFrom
// 鉴于Multimap可以把多个键映射到同一个值也可以把一个键映射到多个值,反转Multimap也会很有用。Guava
// 提供了invertFrom(Multimap toInvert,
// Multimap dest)做这个操作,并且你可以自由选择反转后的Multimap实现。
// 注:如果你使用的是ImmutableMultimap,考虑改用ImmutableMultimap.inverse()做反转。
ArrayListMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.putAll("b", Ints.asList(2, 4, 6));
multimap.putAll("a", Ints.asList(4, 2, 1));
multimap.putAll("c", Ints.asList(2, 5, 3));
TreeMultimap<Integer, String> inverse = Multimaps.invertFrom(multimap, TreeMultimap.create());
// {1=[a], 2=[a, b, c], 3=[c], 4=[a, b], 5=[c], 6=[b]}
System.out.println(inverse);
}
@Test
public void test3()
{
// 想在Map对象上使用Multimap的方法吗?forMap(Map)把Map包装成SetMultimap。
//这个方法特别有用,例如,与Multimaps.invertFrom结合使用,可以把多对一的Map反转为一对多的Multimap。
Map<String, Integer> map = ImmutableMap.of("a", 1, "b", 1, "c", 2);
SetMultimap<String, Integer> multimap = Multimaps.forMap(map);
System.out.println(multimap);
// multimap:{a=[1], b=[1], c=[2]}
Multimap<Integer, String> inverse = Multimaps.invertFrom(multimap, HashMultimap.create());
System.out.println(inverse);
// {1=[a, b], 2=[c]}
}
}
阅读全文
0 0
- MultiMaps
- C++ MultiMaps
- maps和multimaps
- map、multimaps函数
- map、multimaps函数
- Guava collections -- Multimaps
- C++ Maps & MultiMaps
- C++ Maps & MultiMaps
- 关联式容器:Sets、Multisets、Maps、Multimaps
- STL学习记录(九)Maps、Multimaps
- STL容器Maps和Multimaps使用
- 【C++】 C++标准模板库(八) MultiMaps
- Javascript(BOM)浏览器对象 2017-08-01
- oracle数据库解锁
- java大任务拆分
- 2.1.2—线性表—Remove Duplicates from Sorted Array II
- POJ
- MultiMaps
- 联想 ubuntu14.04无线网卡被禁用的解决办法
- 特征检测详解
- maven项目单元测试时ClassNotFoundException问题
- Tomcat密码爆破小记
- java画矩形
- Java和Groovy性能测试
- 使用Sencha cmd 创建Extjs6.2项目
- jQuery选择器文字攻略