java - 在 HashSet 中添加时 GSON 双舍入

标签 java android performance gson

所以我正在使用 GSON 解析一个非常大的 JSON 文件。 我将其解析成的类结构如下:

我想做的是将 double (在 HashSet 中,在 Geometry 类中)四舍五入到小数点后 4 位。因此,随着将 double 添加到 HashSet,我想将它们四舍五入。

public class Contours {

    public String name = null;
    public String type = null;
    ArrayList<Features> features = null;

    class Features {
        public String type = null;
        public Geometry geometry = null;
        public Properties properties = null;
    }

    class Geometry {
        public String type = null;
        HashSet<double[]> coordinates = null;
    }

    class Properties {
        public String CONTOUR = null;
        public int OBJECTID;
        public String LAYER = null;
        public double ELEVATION;
    }

}

为什么我不能在 GSON 解析文件后迭代执行此操作?

该文件非常大,有 412,064 行,大小为 27.5mb。所以这样做会花费很长时间。

注意:每次运行此应用程序时都会进行此解析,因此速度是必要的。

谢谢

最佳答案

您可以注册一个 TypeAdapter 来修改读取的值:

public class GsonDoubleAdapterTest {
    public static void main(String[] args) {
        GsonBuilder builder = new GsonBuilder();

        builder.registerTypeAdapter(Double.class, new DoubleAdapter());

        Gson gson = builder.create();
        Foo foo = gson.fromJson("{\"baz\": 0.123456}", Foo.class);
        System.out.println(foo);
    }
}

/**
 * A type adapter that rounds doubles during read.
 */
class DoubleAdapter extends TypeAdapter<Double> {
    @Override
    public void write(JsonWriter out, Double value) throws IOException {
        out.value(value);
    }

    @Override
    public Double read(JsonReader in) throws IOException {
        return new BigDecimal(in.nextDouble()).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }
}

class Foo {
    private Double baz;

    public Double getBaz() {
        return baz;
    }

    public void setBaz(Double baz) {
        this.baz = baz;
    }

    @Override
    public String toString() {
        return "Foo[baz=" + baz + ']';
    }
}

关于java - 在 HashSet 中添加时 GSON 双舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441566/

相关文章:

performance - 通用多面体内的长方体

java - 按住撤消加速键时性能不佳

java - 如何在列表中查找重复项并合并它们

java - jBoss 6 中的不同托管服务器之间是否共享连接池?

java - PyYaml 到 SnakeYaml --- AWT-EventQueue- 0"Can' t 为标签 :yaml. org,2002:java/object 构造一个 java 对象:

java - 如何跳过索引文件并直接显示 json 响应?

java JComboBox问题

Android 为什么以所需格式解析日期时间需要大约 50-60 毫秒?

android - list 合并失败 : uses-sdk:minSdkVersion 14

android - am start 找不到 list 中列出的主要 Activity