1

GAE と永続マップを使用して Linq4j のテストを終了しました。

@Test
public void testLinq4j() {
    Map<Long, String> map = Humongous.getMap("Users", LongParser.getInstance());

    map.put(1L, "user1");
    map.put(2L, "user2");

    assertNotNull(map.get(1L));
    assertNotNull(map.get(2L));

    final List<Grouping<Object, Map.Entry<Long, String>>> result =
              new ArrayList<Grouping<Object, Map.Entry<Long, String>>>();

    Linq4j.asEnumerable(map.entrySet())
        .where(new Predicate1<Map.Entry<Long,String>>() {
            @Override
            public boolean apply(Map.Entry<Long, String> v1) {
                if (v1.getKey().equals(2L)){ // filter only those with ID == 2
                    return true;
                }
                return false;
            }
        })
        .groupBy(
                new Function1<Map.Entry<Long, String>, Object>() {
                    public Object apply(Map.Entry<Long, String> entry) {
                        return entry.getValue();
                    }
                })
                .into(result);

    assertEquals(2, map.size());
    assertEquals(1, result.size());
}

質問は次のとおりです。

  • Linq4j は内部的に、map.entrySet()またはそのメソッドでどのように動作しasEnumerableますか? 私の場合、map.entrySet()最終的にはPreparedQuery、クエリに一致するデータストア内のすべてのレコードへの安全な反復子を持つデータストアに要約されます。永続マップの場合、特定のkind;のすべてのレコードに一致します。これは本当に大きいかもしれません。上記の「ユーザー」のようなマップに 100 万件のレコードが含まれている場合、このクエリはそれぞれの反復処理が非常に遅くなりますMap.Entryか?

  • HeapOverFlowErrorを引き起こす可能性のある java.util.List` を見つけたときにlinq4j呼び出します...toList()Collection<E>? I ask this because calling this methods copied all the Datastore keys into

4

0 に答える 0