我必须使用以下格式比较两个文件:
Manufacturer,Model,Key
----------------------
Honda,Civic,12
Honda,Civic,13
BMW,z3,14
BMW,X3,15
BMW,z3,16
只有当每个型号和制造商的密钥相同(相同的订单)时,文件才相同,但模型和制造商可以有不同的订单。 例如,上面提到的文件与:
相同Honda,Civic,12
BMW,z3,14
Honda,Civic,13
BMW,z3,16
BMW,X3,15
但与Civic&#39键的不同顺序不一样:
Honda,Civic,13
Honda,Civic,12
BMW,z3,14
BMW,X3,15
BMW,z3,16
或(BMW z3键的值不同):
Honda,Civic,13
Honda,Civic,12
BMW,z3,16
BMW,X3,15
BMW,z3,16
编写一个能够以这种方式比较文件的java程序的最佳方法是什么?我知道最简单的方法是使用一些unix命令(使用sort来获取所有制造商,grep为每个制造商获取行,使用sort来获取所有模型和grep),但我必须使用Java。 解决方案:
谢谢!
答案 0 :(得分:2)
使用 <script>
var map = L.map('map', {
center: [41.8, 12.5],
zoom: 5,
zoomControl:true, maxZoom:15, minZoom:4,
});
var feature_group = new L.featureGroup([]);
var raster_group = new L.LayerGroup([]);
var basemap = L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}', {
attribution: 'Tiles © Esri — Source: Esri',
});
basemap.addTo(map);
function style1(feature) {
return {
weight: 2,
radius: 10,
opacity: 1,
color: 'black',
weight: 1,
fillOpacity: 1,
fillColor: 'red'
};
}
L.geoJson(villes, {
style: style1,
pointToLayer: function (feature, latlng)
{
return L.circleMarker(latlng).bindLabel( feature.properties.Name, {className: "ville", noHide: true });
}
}
)
.addTo(map)
.showLabel;
</script>.
。关键是制造商和型号,值是该组合的键列表(或整行,无关紧要)。我使用String是因为没有必要将这些东西解析为更具体的结构,但如果你更喜欢这个设计,你可以这样做。
将每个文件解析为这样的结构。如果之后,两个文件的映射相同,则文件是等效的。
答案 1 :(得分:0)
如果您要处理100000多行,则可以在每个品牌/型号的ID列表中使用java.util.zip.CRC32
。一个Map<String,Checksum>
,内存占用量很小,最后每个品牌/型号只需要进行一次比较。