2

有没有办法将 java.util.map(HashMap) 转换为 HazelCast IMap ?

Map<String, User> map = ....;
IMap<String, User> imap;

谢谢

4

3 回答 3

2

引用 Hazelcast 官方文档:

假设您想测试两个成员是否具有相同的地图大小。

@Test
public void testTwoMemberMapSizes() {
  // start the first member
  HazelcastInstance h1 = Hazelcast.newHazelcastInstance();
  // get the map and put 1000 entries
  Map map1 = h1.getMap( "testmap" );
  for ( int i = 0; i < 1000; i++ ) {
    map1.put( i, "value" + i );
  }
  // check the map size
  assertEquals( 1000, map1.size() );
  // start the second member
  HazelcastInstance h2 = Hazelcast.newHazelcastInstance();
  // get the same map from the second member
  Map map2 = h2.getMap( "testmap" );
  // check the size of map2
  assertEquals( 1000, map2.size() );
  // check the size of map1 again
  assertEquals( 1000, map1.size() );
}

ps请不要这样写,使用给定的时候/安排行为断言

于 2018-07-17T07:14:10.077 回答
2

迈赫达,

HazelcastIMap实现MapConcurrentMap接口。在以下情况下,对象map2map将指向同一个分布式对象(甚至更多,map2并且map将指向同一个代理对象)。

Map<Object, Object> map2 = hazelcastInstance.getMap("test"); IMap<Object, Object> map = hazelcastInstance.getMap("test");

使用Map接口,您会受到“标准”方法的限制。IMap提供诸如提交 EntryProcessors、添加事件监听器等扩展。

我希望它确实有意义。如果您有任何问题,请告诉我。

谢谢

于 2016-10-25T22:14:24.763 回答
1

我知道它很旧,但这是我的解决方案:

向项目添加额外的依赖项:

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    <classifier>tests</classifier>
    <version>${hazelcast.version}</version>
    <scope>test</scope>
</dependency>

在您的单元测试中,您将拥有以下字段:

@Mock
private HazelcastInstance hazelcastInstance;

private TestHazelcastInstanceFactory hazelcastFactory = new TestHazelcastInstanceFactory();

最后,在您的测试中(假设您使用的是 Mockito):

// mock the hazelcast map
IMap<Object, Object> mockedMap = hazelcastFactory.newHazelcastInstance().getMap("doesntmatter");
mockedMap.put("some-key", someObject);

when(hazelcastInstance.getMap("testMap")).thenReturn(mockedMap);
于 2018-03-21T21:26:33.517 回答