无需转为List,在MongoDB中存储float数组的问题
解决MongoDB Java驱动存储
float[]数组的编解码器错误 这个问题我之前也碰到过,本质是MongoDB Java驱动默认不支持基本类型的数组(比如float[]),它只认包装类型数组(Float[])或者集合类型(比如List<Float>)。给你两种简单的解决办法:
方法一:将基本类型数组转换为包装类型数组
利用Java 8+的Stream API可以快速把float[]转成Float[],代码示例如下:
float floatArray[] = {1, 2, 3, ..., 10000}; // 把基本类型float数组转换为包装类型Float数组 Float[] wrappedFloatArray = Arrays.stream(floatArray).boxed().toArray(Float[]::new); MongoCollection<Document> collection = database.getCollection(XMLUtils.getDatabaseCollectionName()); Document doc = new Document("_id", edgeId).append("floatArray", wrappedFloatArray); collection.insertOne(doc);
方法二:将数组转换为List<Float>
如果更习惯用集合类型,也可以转成List<Float>,驱动对集合的支持同样完善:
import java.util.stream.Collectors; float floatArray[] = {1, 2, 3, ..., 10000}; // 转换为List<Float> List<Float> floatList = Arrays.stream(floatArray).boxed().collect(Collectors.toList()); MongoCollection<Document> collection = database.getCollection(XMLUtils.getDatabaseCollectionName()); Document doc = new Document("_id", edgeId).append("floatArray", floatList); collection.insertOne(doc);
兼容Java 8以下版本的手动转换方式
如果你的项目还在使用Java 8之前的版本,那就手动循环转换:
float floatArray[] = {1, 2, 3, ..., 10000}; Float[] wrappedArray = new Float[floatArray.length]; for (int i = 0; i < floatArray.length; i++) { wrappedArray[i] = floatArray[i]; // 自动装箱为Float } // 后续存储逻辑和上面一致
原理很简单:MongoDB Java驱动内置了Float[]和List<Float>的编解码器,而没有为基本类型数组([F是float[]的类名标识)提供默认支持,所以转换类型后就能正常序列化存储了。
内容的提问来源于stack exchange,提问作者p192
相关产品推荐
相关产品推荐

