gpt4 book ai didi

java - 按单独的字符串对值进行排序

转载 作者:行者123 更新时间:2023-12-02 05:46:57 25 4
gpt4 key购买 nike

很抱歉这个非描述性标题,我想不出 100 个字以内的更好解释方法。我希望能够做的是根据与主字符串关联的字符串和字符串数组“顺序”将字符串列表排序到“框”中。

对于我当前的设置,我使用 HashMap 来存储字符串及其关联的“按顺序排列”字符串。

我知道我的解释确实很糟糕,所以我制作了一张图片,希望能更好地解释它:

变量初始化如下:

private final String[] order = new String[] {"Severe", "Warning", "Info"};
private final Box[] boxes = new Box[] {new Box(1), new Box(2), new Box(3), new Box(4)};
private final Map<String, String> texts = new HashMap<String, String>();

texts.put("Server on fire!", "Severe");
texts.put("All is good!", "Info");
texts.put("Monkeys detected!", "Warning");
texts.put("Nuke activated!", "Severe");

No!这应该不会太难实现,但我能想到的唯一方法是使用 3 个循环,这似乎有点浪费,而且如果有大量输入,速度会很慢。

这里有一些示例代码,希望能够展示我到目前为止所想到的内容,或许还能解释问题,我还没有测试过它,也没有方便的 IDE,所以可能忽略了一些东西。

Set<Box> usedBoxes = new HashSet<Box>();

for(String curOrder : order) {
for (String text : texts) {
if (texts.get(text).equals(order)) {
for (Box box : boxes) {
if (!usedBoxes.contains(box)) {
box.setText(text);
usedBoxes.add(box);
break;
}
}
}
}
}

最佳答案

我不确定我是否完全理解您想要实现的目标,但我觉得有两件事可以使您的设计变得更加简单:

  1. 不要使用字符串来表示您的严重级别。请改用枚举。枚举有一个名称,可能有其他字段和方法,并且自然地使用其定义顺序进行排序。并且没有办法犯错并引入未知的严重性:它们是类型安全的

    enum Severity {
    SEVERE, WARNING, INFO
    }
  2. 不要将事物存储在并行数组中或将它们与映射相关联。定义一个包含对象信息的类:

    public class Box {
    private String text;
    private Severity severity;
    }

现在您已经有了这些,您可以简单地创建一个 List<Box> ,并使用 Comparator<Box> 对其进行排序按严重程度对它们进行排序,例如:

List<Box> boxes = Arrays.asList(new Box("Server is on fire", Severity.SEVERE),
new Box("All is good", Severity.INFO),
...);
Collections.sort(boxes, new Comparator<Box>() {
@Override
public int compare(Box b1, Box b2) {
return b1.getSeverity().compareTo(b2.getSeverity());
}
}

或者更简单,使用 Java 8:

boxes.sort(Comparator.comparing(Box::getSeverity));

关于java - 按单独的字符串对值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com