我是Java的新手,希望根据CSV列的值映射它们。我的原始csv数据如下所示:
name,salary,address
AAA,1000,kkk
BBB,880,lll
AAA,90,kkk
CCC,700,mmm
BBB,700,lll
预期输出应为Hashmap键值对,两列分别为name和salary,如下所示:
Key: AAA Value 1090
Key: BBB Value 1580
Key: CCC Value 700
这是我的代码:
String line = "";
InputStreamReader inStream = new
InputStreamReader(uc.getInputStream());
buff = new BufferedReader(inStream);
try {
while ((line = b.readLine()) != null) {
String[] fields = parseCsvLine(line);
// I dont know what to do here
}
b.close();
Log.d("Get data from API", "Processing Stop");
} catch (IOException e) {
e.printStackTrace();
}
public String[] parseCsvLine(String line) {
// Create a pattern to match breaks
Pattern p =
Pattern.compile(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
// Split input with the pattern
String[] fields = p.split(line);
for (int i = 0; i < fields.length; i++) {
// Get rid of residual double quotes
fields[i] = fields[i].replace("\"", "");
}
return fields;
}
您想要的是将您的线条数据分割成一部分。然后将其累积到一个Map
Map<String, Integer> result = new HashMap<>();
while ((line = b.readLine()) != null) {
String[] parts = line.split(","); // Split your line, take `,` as delimeter
String key = parts[0]; // This is your 'AAA'
Integer value = Integer.parseInt(parts[1]); // This is your 1000
if (result.get(key) == null) {
result.put(key, value);
} else {
result.put(key, result.get(key) + value); // There's already a value here, add it with new value
}
}
丑陋的部分:
if (result.get(key) == null) {
result.put(key, value);
} else {
result.put(key, result.get(key) + value); // There's already a value here, add it with new value
}
可以替换为新的Java8地图实用程序:
result.putIfAbsent(key, value); // Put (key, value) if key is absent from the map
result.compute(key, value, (k, v) -> v + value);
下面是Main中的随机客户端列表 第二类:产品(字符串名称、枚举类别、BigDecimal价格) 目标->预期结果:在类Main中,创建类Shopping的实例,其中属性是具有 的映射,并用随机数据//integer-购买了多少产品 null null
我使用的是JPA,在我的DB中我有一个表,列为:id、firstname和firstAndLastname 所以我做了一个来映射数据,我可以从另一个表中获取,但是我没有持久化它,因为DB中没有列lastname。 如何存储在列中,该列是firstname和lastname的串联,并存储在特定的列中,例如:firstname:John,lastname:Doe=>firstAndLastname:J
只有当每个键在map1中都有唯一的值时,我才会陷入如何将键值对从map1转移到map2的困境。 假设我有以下地图: 地图1:[1,2][2,4][4,4] 我想算法应该是: 遍历第一张地图中的条目。 向map2添加密钥。 将一个值添加到检查map2的值的集合 如果值是重复的,则不会将该值添加到集合中,并且忽略将其相应的键添加到map2。 代码片段: 我的想法是如何在正确的轨道上完成的吗?这里迷失了
我有我创建的地图的地图 我尝试在第二个映射中迭代键的值。 所以它可以是这样的: key1->keya->value1 -------->键->值2 -------->键->值4 -------->KeyC->value1 我想继续多久就继续多久。 因此,我有,并尝试使用名为的值变量和增量计数器if来循环中的所有值 我不知道如何获得。我试着这样做 但这给了我信笺。 如果我执行,它会给出我想要的正确值
我试图从dfb中减去dfa,其中列映射基于第三个映射数据帧。在本例中,应从x1中减去B,从x2中减去A。 这可以通过循环和其他一些肮脏的方法来实现,但我想知道是否有更简洁的方法来实现这一点。 数据帧a 数据帧b 数据帧c 所需结果
假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?