开源项目

相关文章

更多

最近更新

更多

Guava集合处理- Bimap接口

2019-04-23 23:07|来源: 网路

BiMap是一种特殊的映射其保持映射,同时确保没有重复的值是存在于该映射和一个值可以安全地用于获取键背面的倒数映射。

接口声明

以下是com.google.common.collect.Bimap<K,V>接口的声明:

@GwtCompatiblepublic interface BiMap<K,V>extends Map<K,V>

接口方法

S.N. 方法及说明
1 V forcePut(K key, V value)
另一种put的形式是默默删除,在put(K, V)运行前的任何现有条目值值。
2 BiMap<V,K> inverse()
返回此bimap,每一个bimap的值映射到其相关联的键的逆视图。
3 V put(K key, V value)
关联指定值与此映射中(可选操作)指定的键。
4 void putAll(Map<? extends K,? extends V> map)
将所有从指定映射此映射(可选操作)的映射。
5 Set<V> values()
返回此映射中包含Collection的值视图。

继承的方法

这个类继承自以下接口方法:

  • java.util.Map

BiMap 示例

使用所选择的编辑器创建下面的java程序,比如说 C:/> Guava

GuavaTester.java

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
public class GuavaTester {

   public static void main(String args[]){
      BiMap<Integer, String> empIDNameMap = HashBiMap.create();

      empIDNameMap.put(new Integer(101), "Mahesh");
      empIDNameMap.put(new Integer(102), "Sohan");
      empIDNameMap.put(new Integer(103), "Ramesh");

      //Emp Id of Employee "Mahesh"
      System.out.println(empIDNameMap.inverse().get("Mahesh"));
   }	}

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看看以下结果:

101


相关问答

更多

什么是实现Iterable接口的集合?

Iterator是一个遍历器。它相当于一个游标,刚开始时指向要遍历的集合(比如程序中的String数组)的第一个元素之前,然后每调用一次next()方法,这个游标就会向前走一格,当走到集合最后一个元素之后,hasNext()方法会返回false,表示游标已经走到最后,没有下一个值了。 以下是详细注释: import java.util.*; public class IterableClass implements Iterable { protected String[] words = ("A ...

Google Guava供应商示例(Google Guava Supplier Example)

Supplier接口只是一个无参数函数的抽象,它返回一个值...它是获取对象的一些实例或实例的一种手段 。 既然它是如此普遍,它可以用于许多事情。 Jared解释了Multimaps工厂如何利用它作为创建某种类型值Collection的新实例的工厂。 鉴于接口的简单性,它还允许通过将Supplier的行为包装在另一Supplier ,以某种方式改变其行为,从而对Supplier的行为进行非常有力的装饰。 记忆就是一个例子。 我已经使用Suppliers.memoizeWithExpiration方 ...

用Boost.Bimap替换矢量和散列表(Replace vector and hash table with Boost.Bimap)

要获得size_t和std :: string之间的bimap,你需要使用unordered_set_of,这里有〜常量(最高为散列和任何潜在冲突的代价): #include <boost/bimap.hpp> #include <boost/bimap/unordered_set_of.hpp> #include <string> #include <iostream> #include <typeinfo> int main(int argc, char* argv[]) { type ...

使用Guava ForwardingList装饰集合的意外行为(Unexpected behaviour decorating a collection using Guava ForwardingList)

这种模式可行的唯一方法是,在创建装饰器后再也不会再次引用originalList 。 ForwardingList可能无法控制originalList发生的事情。 (没有装饰者可以。) 总的来说,你应该做的是创建一个工厂方法,它返回一个全新的装饰列表,永远不会让你访问原始列表。 The only way this pattern is going to work is if you never reference originalList again after you've created th ...

java的番石榴库(The Guava library: What are its most useful and/or hidden features? [closed])

严重的是,番石榴一切都很有用。 我一直在使用它一段时间,而且我仍然总是发现一些新的东西,它可以减少代码而不是用手做的。 有些事情其他人并没有真正提到我爱: Multimap只是很棒。 任何时候,您都可以使用Map<Foo, Collection<Bar>> ,使用多重图形,并为您自定义一个繁琐的检查映射到一个键的现有集合,如果不存在则创建和添加它。 Ordering对于构建Comparator是非常好的,它们的行为只是你想要的。 Maps.uniqueIndex和Multimaps.index : ...

Apache Commons vs. Guava(以前的“Google Collections”)[关闭](Google Guava vs. Apache Commons [closed])

在我看来,更好的选择是Guava (以前称为Google收藏): 它更现代(有泛型) 它绝对遵循Collections API要求 它积极维护 CacheBuilder和它的前身MapMaker只是很棒的 Apache Commons Collections也是一个很好的库,但是它一直未能提供泛型启用版本(这在我看来是一个集合API的一个主要缺点),一般似乎是在维护/不做- 很多工作在它的模式最近的Commons Collections已经收拾了一些蒸汽,但它有一些追赶。 。 如果下载大小/内存占 ...

FlexeLint和boost :: bimap(FlexeLint and boost::bimap)

对于那些和我一样遇到同样问题的人。 我直接向Gimepl支持询问了这个问题,他们回答说这是FlexeLint无法处理c ++ 11可变参数模板的问题。 所以,就目前而言,只有解决方法是通过-elib和-e选项来抑制这些警告。 For those of You who hitted the same problem as me. I asked this question directly to Gimepl support and they answered that this is a prob ...

从重叠范围创建Guava ImmutableRangeSet(Create Guava ImmutableRangeSet from overlapping ranges)

你能更具体地了解你的用例吗? 我猜你有一系列范围,你正在尝试使用copyOf方法创建ImmutableRangeSet ,它会在重叠范围的情况下抛出IAE。 让我们看看这个测试用例: @Test public void shouldHandleOverlappingRanges() { //given ImmutableList<Range<Integer>> ranges = ImmutableList.of( Range.closed(0, 2), ...

使用Supplier接口的Guava Lazy Collection(Guava Lazy Collection using Supplier interface)

根据与Louis Wasserman的讨论,我决定接受他的建议并使用迭代器。 以下解决方案似乎对我有用。 class MySupplier<T> implements Supplier<T> { private T s; public MySupplier( T s ) { this.s = s; } public T get() { System.out.println( String.format( "Lazy loading ' ...

Guava ImmutableBiMap变为LinkedHashMap并导致Spring自动装配错误(Guava ImmutableBiMap becomes LinkedHashMap and cause Spring autowiring mistake)

这是Spring处理某些容器类型的副作用。 只要预期的键类型是String即使类型Map也可以自动装配。 Map值将包含期望类型的所有bean,并且这些键将包含相应的bean名称:[...] BiMap是一张Map 。 Spring并没有试图将你的automatons bean注入到TestControl 。 相反,它试图找到Integer类型的所有bean作为值,将它们收集到一个Map ( LinkedHashMap作为选择的实现),并将它们与它们的bean名称关联起来。 在这种情况下,由于构造 ...