Backport Java 8 Lambda代码 - Avro的JSON字节数组

时间:2017-03-26 03:29:51

标签: java lambda java-8 avro

我需要从这个库反向移植一些Java 8代码: https://github.com/allegro/json-avro-converter

对于使用Java 8更有经验的人可以确认以下用于将JSON编码字节数组转换为Avro的代码是否实际上是相同的,并且我没有错过一个愚蠢的边缘案例?

使用lambdas:

private GenericData.Record readRecord(Map<String,Object> json, Schema schema, Deque<String> path) {
    GenericRecordBuilder record = new GenericRecordBuilder(schema);

    json.entrySet().forEach(entry ->
        ofNullable(schema.getField(entry.getKey()))
            .ifPresent(field -> record.set(field, read(field, field.schema(), entry.getValue(), path, false))));
    return record.build();
}

我对JDK7的修改:

private GenericData.Record readRecord(Map<String,Object> json, Schema schema, Deque<String> path) {
    GenericRecordBuilder record = new GenericRecordBuilder(schema);

    for (Map.Entry<String, Object> entry : json.entrySet()) {
        Schema.Field field = schema.getField(entry.getKey());
        if (field != null) {
            record.set(field, read(field, field.schema(), entry.getValue(), path, false));
        }
        else {
          // Do nothing
        }
    }
    return record.build();
}

0 个答案:

没有答案