【问题标题】:IntelliJ Java Type Renderers for Eclipse Collections with primitives带有原语的 Eclipse 集合的 IntelliJ Java 类型渲染器
【发布时间】:2021-05-07 02:48:38
【问题描述】:

我发现Eclipse Collections 非常有用。尤其是原始类型的集合(例如:IntObjectHashMap)。 不幸的是,在 IntelliJ IDEA 调试器中呈现这些集合存在问题。

让我们有一个示例代码:

import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap;
import java.util.HashMap;

public class Test {
    public static void main(String[] args) {
        IntObjectHashMap<String> eclipseMap = new IntObjectHashMap<>(4);
        eclipseMap.put(1, "one");
        eclipseMap.put(2, "two");

        HashMap<Integer, String> hashMap = new HashMap<>(4);
        hashMap.put(1, "one");
        hashMap.put(2, "two");

        System.out.println("" + eclipseMap);
        System.out.println("" + hashMap);
    }
}

这里有一个调试器变量视图:

我们可以看到 JDK HashMap 被完美渲染,但 IntObjectHashMap Eclipse Collection 不是。

当我为 Eclipse Collection 下拉值时情况更糟:

正如我们所见 - 值列表中没有 one 元素。

您可以说:好的,作为一种解决方法,您可以使用 IntelliJ 中提供的标准 toString 渲染器:

不幸的是,我的情况并非如此,因为我的收藏有数千万个元素。

所以我的问题是:

有人知道一个地方/一个项目,我可以在其中找到用于原始类型的 Eclipse Collections 的 IntelliJ Java 类型渲染器吗?

【问题讨论】:

    标签: java intellij-idea eclipse-collections


    【解决方案1】:

    你可以创建一个类型渲染器,例如这样:

    【讨论】:

      【解决方案2】:

      @Egor 的答案几乎是完美的 :) 它效果很好,但仅适用于小型收藏。

      让我描述@Egor 解决方案的问题。让我们看一下例子:

      import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap;
      
      public class Test3 {
          public static void main(String[] args) {
              final int CAPACITY = 20_000_000;
              IntObjectHashMap<String> eclipseMap = new IntObjectHashMap<>();
              for (int i = 0; i < CAPACITY; i++) {
                  eclipseMap.put(i, Integer.toString(i));
              }
      
              System.out.println("Hello world.");
          }
      }
      

      现在运行它 - 一切正常。 现在将断点放在System.out.println("Hello world.") 行,并在调试模式下执行此程序。

      我们会被 OutOfMemoryError 扇耳光(因为 IntelliJ 在这个集合上调用了 toString 方法):

      要解决这个问题,我们需要设置When rendering a node -> Use following expression - 比如这样:

      【讨论】:

      • 谢谢!我还没有在大集合上尝试过
      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2014-12-23
      相关资源
      最近更新 更多