当前位置: 首页 > 知识库问答 >
问题:

从文件向映射添加值

郑胡媚
2023-03-14

我想遍历一个包含键/值对的文件,并将它们放入一个映射中。

该文件包含如下值:

forward 5
up 4
down 3
down 6
forward 4
...

下面是我的代码:

java prettyprint-override">       private static void depthPosition() throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new FileReader("/Users/WorkAcc/Desktop/file.txt"));
        String lines;
        Map<String, Integer> instructions = new HashMap<>();
        String [] pair;

        while ((lines = bufferedReader.readLine()) != null) {
           pair = lines.split(" ");
           instructions.put(pair[0], Integer.valueOf(pair[1]));
        }
        System.out.println(instructions);
    }
}

我遇到的问题是,名为instructions的映射没有从文件中添加新值,它在大小为3时停止,不确定原因。非常感谢您的帮助。谢谢

共有2个答案

房新翰
2023-03-14

正如评论中提到的,地图中不允许有重复的密钥。

如果你想读取这些字符串并保持顺序(这看起来很可能),你可以这样做。

  • 创建一个记录(不可变类)来保存方向和数量。也可以使用常规类。
  • 实例化扫描仪来读取文件(出于演示目的,我正在从字符串中读取)。
  • 创建一个List来保存记录。在本例中是一个ArrayList
  • 然后按如下方式遍历该文件。
String s  = "forward 5\n up 4\n down 3\n down 6\n forward 4\n";

record Info(String direction, int amount){
    @Override
    public String toString() {
        return "[%s, %s]".formatted(direction, amount);
    }
}
Scanner input = new Scanner(s);
List<Info> list = new ArrayList<>();

while(input.hasNextLine()) {
    list.add(new Info(input.next(), input.nextInt()));
    input.nextLine();  // consume end of line marker
} while(input.hasNextLine());

list.forEach(System.out::println);

印刷品

[forward, 5]
[up, 4]
[down, 3]
[down, 6]
[forward, 4]

你也可以像这样进行交互,得到单独的值。

for (Info info : list) {
  System.out.println(info.direction() + " " + info.amount());
}

印刷品

forward 5
up 4
down 3
down 6
forward 4

注:上述解决方案假定每行定义良好,每行包含一个String和一个int,由一个或多个空格分隔。否则,可能会引发异常。

太叔小云
2023-03-14

这是一个如何计算你在评论中指出的内容的示例

public void depthPosition() throws IOException {
    int value = 5;
    List<Instruction> instructions = readInstructionsFromFile("/Users/WorkAcc/Desktop/file.txt");
    int result = calculateDepthPosition(instructions, value);
    System.out.println("result is: "+result);
}

private List<Instruction> readInstructionsFromFile(String filePath) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
    String line;
    Instruction instruction;
    List<Instruction> instructions = new ArrayList<>();
    String[] pair;

    while ((line = bufferedReader.readLine()) != null) {
        pair = line.split(" ");
        instruction = new Instruction(pair[0], Integer.valueOf(pair[1]));
        instructions.add(instruction);
    }
    return instructions;
}

private int calculateDepthPosition(List<Instruction> instructions, int value){
    int nextValue = value;
    int result = value;
    for (Instruction instruction : instructions) {
        nextValue = instruction.apply(nextValue);
        result = Math.min(result, nextValue);
    }
    return result;
}

public static class Instruction {

    private String type;
    private int amount;

    public Instruction(String type, int amount) {
        this.type = type;
        this.amount = amount;
    }

    public int apply(int value) {
        switch (type) {
            case "forward":
                return value + amount;
            case "down":
                return value - amount;
            case "up":
                return value ?? amount;
            default:
                return value;
        }
    }
}
 类似资料:
  • 我有一个jar文件,其中有一些映射文件,我想添加作为hibernate.cfg.xml中的映射资源,因为我在org.hibernate.cfg.comfiguration中添加了jar。 在hibernate.cfg.xml中我添加了… 当我执行java应用程序时,我得到了这个异常... 有人能帮我吗?

  • 我试图创建一个人口的叶绿素地图在HighMaps使用自定义Geojson文件。 我有两个Geojson文件-第一个包含县级数据,第二个包含县域内较小的城镇区域。 我试图将县级边界添加到我的叶绿体地图中,类似于以下示例:http://www.highcharts.com/maps/demo/us-counties 我能够让小区域以适当的颜色渐变正确绘制;然而,县边界没有出现在我的地图上。 我的js代

  • 问题内容: 我试图或多或少地使用Java API 重新创建此示例。 我认为我所需要的只是向索引添加映射,但是Java API文档尚不清楚如何执行此操作。 请告诉我如何用Java创建映射,该映射与文档中的示例等效: 这是我的代码: 问题答案: 终于,经过一天的谷歌搜索获得了回报。坦率地说,用于Elasticsearch的Java API文档可以使用一些端到端示例,更不用说JavaDoc … 这是一个

  • 我想知道如何使用ngx awesome uploader将图像从Angular上传到azure storage blob。 我希望能够使用此库将其直接从angular发送到azure存储blob。我已经能够将它发送到我的nodejs后端没有问题,但是直接将它发送到blob存储对我来说是一个挑战。有人能提供一个如何做到这一点的工作示例吗?谢谢你的帮助! ngx真棒上传器的stackblitz示例 该

  • 问题内容: 有人可以解释在xml映射文件中使用逆函数的方法吗,我正在阅读本教程,但无法理解在映射文件中的逆函数的用法? 谢谢 问题答案: 逆仅决定关系中的哪个实体负责更新数据库以反映关联。 假设一对多的双向关联。代码A和B中有两个类,A包含一组B,B维护对A的引用。在数据库级别,只有一个外键要更新,B的表包含一个到主键的列的A。 在这种情况下,假设我们将inverse = true放在集合侧。这意

  • 并将属性加载到映射中,结果为: 有什么想法如何创建一个映射策略吗?