我正在使用 Jasper 报表折线图。在该折线图类别表达式中,相同的值仅打印一次。
在这里,In Thread name 列被指定为折线图中的Category 表达式。不打印冗余值。仅打印唯一名称。 我想要我所有的名字,即使是同名。如何解决这个问题?
我正在使用 Jasper 报表折线图。在该折线图类别表达式中,相同的值仅打印一次。
在这里,In Thread name 列被指定为折线图中的Category 表达式。不打印冗余值。仅打印唯一名称。 我想要我所有的名字,即使是同名。如何解决这个问题?
您必须将作为类别标签打印的字符串值包装到满足唯一性约束的对象中。您必须创建一个实现 Comparable 接口的 java 类,因为只有不相等的对象才会打印为单独的类别值。以下代码显示了如何实现这样的类:
public class UniqueCategoryLabel implements Comparable<UniqueCategoryLabel> {
private Double id;
private String value;
public UniqueCategoryLabel(String value, Double id) {
this.value = value;
this.id = id;
}
@Override
public int compareTo(UniqueCategoryLabel v) {
return this.id.compareTo(v.id);
}
@Override
public boolean equals(Object v) {
return v instanceof UniqueCategoryLabel && this.id.equals(((UniqueCategoryLabel) v).id);
}
@Override
public int hashCode() {
return this.id.hashCode();
}
@Override
public String toString() {
return value;
}
}
您可以通过使用不同的 id 创建 UniqueCategoryLabel 的实例来提供唯一性,因为 equals 方法检查比较对象的 id 是否相同。图表本身的标签是使用所提供对象的 toString() 方法创建的,因此您的 toString() 方法应该返回您要打印为标签的字符串。在您的报告中,您用于图表的字段必须是 UniqueCategoryLabel 而不是 String 类型,这应该可以发挥所有作用。
您需要向类别表达式添加唯一标识符,因为这是显示重复值的唯一方法。