高速摸鱼,Guava中这些Map的骚操作,让我的代码量减少了50%

作为一个流行的Java库,Guava提供了许多有用的工具和功能,其中之一是对Map进行骚操作的能力。在这篇文章中,我们将探讨一些可以使用Guava对Map进行的骚操作。
在这里插入图片描述

使用MapMaker创建自定义Map

Guava的MapMaker类允许您创建具有各种自定义选项的Map。例如,您可以设置Map的大小,设置并发级别,启用弱引用等等。以下是一个示例代码,演示了如何使用MapMaker创建一个具有最大值的Map,一旦超过这个最大值,就会删除最旧的条目。

Map<String, String> map = new MapMaker()
   .maximumSize(1000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .makeMap();

在上面的代码中,我们使用maximumSize()方法设置Map的最大大小为1000,并使用expireAfterWrite()方法设置Map中每个条目的过期时间为10分钟。一旦超过最大大小,MapMaker将自动删除最旧的条目。
在这里插入图片描述
使用BiMap进行双向映射
Guava的BiMap类提供了双向映射的功能,即可以通过键获取值,也可以通过值获取键。以下是一个示例代码,演示如何使用BiMap:

BiMap<String, Integer> bimap = HashBiMap.create();
bimap.put("one", 1);
bimap.put("two", 2);
bimap.put("three", 3);
System.out.println(bimap.get("one")); // Output: 1
System.out.println(bimap.inverse().get(2)); // Output: two

在上面的代码中,我们使用HashBiMap.create()方法创建一个新的BiMap,并使用put()方法将键和值添加到该映射中。然后,我们可以使用get()方法通过键获取值,并使用inverse()方法获取该映射的反向映射,以通过值获取键。

使用Multimap进行多值映射

Guava的Multimap类允许您将多个值映射到单个键上。这对于需要将多个值与单个键相关联的情况非常有用。以下是一个示例代码,演示如何使用Multimap:

ListMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.put("one", 1);
multimap.put("one", 2);
multimap.put("two", 3);

System.out.println(multimap.get("one")); // Output: [1, 2]

在上面的代码中,我们使用ArrayListMultimap.create()方法创建一个新的Multimap,并使用put()方法将多个值与单个键相关联。然后,我们可以使用get()方法获取与给定键相关联的所有值。

使用ImmutableMap创建不可变Map

Guava的ImmutableMap类允许您创建不可变的Map,其中所有的键值对都不能被修改。以下是一个示例代码,演示如何使用ImmutableMap:

ImmutableMap<String, Integer> immutableMap = ImmutableMap.of(
"one", 1,
"two", 2,
"three", 3
);
System.out.println(immutableMap); // Output: {one=1, two=2, three=3}

在上面的代码中,我们使用ImmutableMap.of()方法创建一个新的不可变Map,并提供一些键值对。然后,我们可以使用该Map的任何方法来访问和查询其内容,但不能对其进行修改。
在这里插入图片描述

使用Table创建二维映射

Guava的Table类允许您创建一个类似于二维表格的映射,其中每个键都可以映射到多个值。以下是一个示例代码,演示如何使用Table:

Table<Integer, Integer, String> table = HashBasedTable.create();
table.put(1, 1, "one");
table.put(1, 2, "two");
table.put(2, 1, "three");

System.out.println(table.get(1, 1)); // Output: one
System.out.println(table.row(1)); // Output: {1=one, 2=two}

在上面的代码中,我们使用HashBasedTable.create()方法创建一个新的Table,并使用put()方法将每个键映射到一个值。然后,我们可以使用get()方法获取指定键的指定值,或使用row()方法获取与指定键相关联的所有值。

使用MapDifference比较两个Map的差异

Guava的MapDifference类允许您比较两个Map之间的差异,并获取它们之间的差异。以下是一个示例代码,演示如何使用MapDifference:

Map<String, Integer> map1 = ImmutableMap.of(
"one", 1,
"two", 2,
"three", 3
);

Map<String, Integer> map2 = ImmutableMap.of(
"one", 1,
"four", 4,
"five", 5
);

MapDifference<String, Integer> diff = Maps.difference(map1, map2);

System.out.println(diff.entriesInCommon()); // Output: {one=1}
System.out.println(diff.entriesOnlyOnLeft()); // Output: {two=2, three=3}
System.out.println(diff.entriesOnlyOnRight()); // Output: {four=4, five=5}

在上面的代码中,我们创建了两个不同的Map,然后查找两个map中的不同项。

这些都是使用Guava对Map进行骚操作的一些示例。Guava还提供了许多其他有用的Map操作,例如使用Table类创建二维映射,使用MapDifference类比较两个Map的差异等等。

猜你喜欢

转载自blog.csdn.net/KRYST4L123/article/details/129857159