Java 按单独的字符串对值排序
对不起,这个非描述性的标题,我想不出一个更好的办法来解释它,只有100个字。我希望能够根据与主字符串关联的字符串和字符串数组“顺序”,将字符串列表排序为“框” 对于我当前的设置,我使用HashMap来存储字符串及其关联的“按顺序放置”字符串 我知道我的解释真的是胡说八道,所以我制作了一个图像,希望能更好地解释: 变量的初始化如下所示:Java 按单独的字符串对值排序,java,Java,对不起,这个非描述性的标题,我想不出一个更好的办法来解释它,只有100个字。我希望能够根据与主字符串关联的字符串和字符串数组“顺序”,将字符串列表排序为“框” 对于我当前的设置,我使用HashMap来存储字符串及其关联的“按顺序放置”字符串 我知道我的解释真的是胡说八道,所以我制作了一个图像,希望能更好地解释: 变量的初始化如下所示: private final String[] order = new String[] {"Severe", "Warning", "Info"}; privat
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");
私有最终字符串[]顺序=新字符串[]{“严重”、“警告”、“信息”};
专用最终框[]框=新框[]{新框(1)、新框(2)、新框(3)、新框(4)};
私有最终映射文本=新HashMap();
文本。放置(“服务器着火!”,“严重”);
text.put(“一切都很好!”,“Info”);
text.put(“检测到猴子!”,“警告”);
文本。放置(“核武器激活!”,“严重”);
这应该不太难实现,但我能想到的唯一方法是使用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;
}
}
}
}
}
Set usedbox=new HashSet();
for(字符串curOrder:order){
用于(字符串文本:文本){
if(text.get(text.equals(order)){
用于(盒子:盒子){
如果(!usedbox.contains(box)){
box.setText(文本);
usedbox.add(框);
打破
}
}
}
}
}
我不确定我是否完全理解您想要实现的目标,但我觉得有两件事可以让您的设计更简单:
enum Severity {
SEVERE, WARNING, INFO
}
public class Box {
private String text;
private Severity severity;
}
列表
,并使用比较器对其进行排序,比较器按严重性排序,例如:
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());
}
}
您应该将您的“状态”(严重、信息等)写入枚举
public enum StatusLevel {
Severe,
Warning,
Info;
}
然后,您可以按StatusLevel
本机排序,只要您按照从上到下的顺序定义
如果您想直接提供框
对象,而不需要拉出状态级别
,或者通过其他属性(如时间或字母顺序)进行二次排序,您应该实现自己的排序
此外,您可能希望查看保持其顺序的映射或其他映射,这样您就不必每次都求助于HashMap
,因为它不能保证顺序。也许这会有所帮助:将严重性用作字符串的原因是我希望它可供最终用户自定义。然后将其作为实现可比较性的类,具有名称和等级属性(等级是将严重性与另一严重性进行比较的方式)。
public enum StatusLevel {
Severe,
Warning,
Info;
}