IntelliJ Java Eclipse Collections 类型渲染器与原语
IntelliJ Java Type Renderers for Eclipse Collections with primitives
我发现 Eclipse Collections 非常有用。特别是 collections 用于原始类型(例如:IntObjectHashMap)。
不幸的是,在 IntelliJ IDEA 调试器中呈现这些 collections 时出现问题。
让我们来一个示例代码:
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
渲染器:
不幸的是,我的情况并非如此,因为我的 collections 有数千万个元素。
所以我的问题是:
有人知道我可以找到 IntelliJ Java Eclipse Collection 原始类型类型渲染器的地方/项目吗?
您可以创建类型渲染器,例如:
@Egor 的回答几乎是完美的:)
效果很好,但仅适用于小型 collections。
让我描述一下@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 在此 collection 上调用了 toString 方法):
为了解决这个问题,我们需要设置 When rendering a node
-> Use following expression
- 例如这样:
我发现 Eclipse Collections 非常有用。特别是 collections 用于原始类型(例如:IntObjectHashMap)。 不幸的是,在 IntelliJ IDEA 调试器中呈现这些 collections 时出现问题。
让我们来一个示例代码:
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
渲染器:
不幸的是,我的情况并非如此,因为我的 collections 有数千万个元素。
所以我的问题是:
有人知道我可以找到 IntelliJ Java Eclipse Collection 原始类型类型渲染器的地方/项目吗?
您可以创建类型渲染器,例如:
@Egor 的回答几乎是完美的:) 效果很好,但仅适用于小型 collections。
让我描述一下@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 在此 collection 上调用了 toString 方法):
为了解决这个问题,我们需要设置 When rendering a node
-> Use following expression
- 例如这样: