以前,我很抱歉,如果我的问题很经典。但是因为我刚刚学习了Android的Java编程,所以我不太了解这些命令。
我目前正在使用以下代码部分制作应用程序:
Map<Integer, CompTypes> mapCompTypes = new java.util.HashMap();
class CompTypes
{
int androidId;
AndroidViewComponent component;
String text;
String type;
CompTypes(int androidId, AndroidViewComponent component, String type, String text)
{
this.androidId = androidId;
this.component = component;
this.type = type;
this.text = text;
}
}
public void SendMessage(HVArrangement container, String message, String dateTime, int fontSize, int fontColor, int alignment, int startid)
{
int id = Integer.parseInt(ChatBox.this.GetLastId());
TextBox comp = new TextBox(vertical);
comp.getView().setId(id);
comp.Text(message);
comp.FontSize(fontSize);
comp.TextColor(fontColor);
comp.MultiLine(true);
comp.Enabled(false);
comp.RequestFocus();
mapCompTypes.put(Integer.valueOf(id), new CompTypes(id, comp, compType, comp.Text()));
int id2 = id + 1;
Label dt = new Label(vertical);
dt.getView().setId(id2);
((TextView)dt.getView()).setText(android.text.Html.fromHtml(datetime));
dt.HTMLFormat(true);
dt.Text(datetime);
dt.getView().setOnClickListener(this);
dt.getView().setOnLongClickListener(this);
mapCompTypes.put(Integer.valueOf(id2), new CompTypes(id2, dt, compType, dt.Text()));
}
public String GetLastId()
{
// how to get last id?
//return ids;
}
此刻,我在从id获取值作为Hashmap的最后一个id时遇到麻烦。 我在这里已经阅读了许多问题和答案,“地图没有最后输入,它不是合同的一部分。” 还有另一种获取最后一个ID的方法吗?
答案 0 :(得分:3)
HaspMap
不保留顺序。因此,无法通过位置last,first或middle获得任何元素。
您可以做的一件事是,在插入key
时将HashMap
保存在某个变量中,并访问该变量以获取最后一个对象的键。对于担保订单,您还可以寻找LinkedHashMap
答案 1 :(得分:1)
HashMap不维护排序。 如果要保持插入顺序,请使用LinkedHashMap。可以这样使用。
private static String getLastId() {
Map<Integer, String> map = new LinkedHashMap<>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
String lastObject = "";
for (Map.Entry<Integer, String> entry : map.entrySet()) {
lastObject = entry.getValue();
}
return lastObject;
}
如果您具有地图键作为自然顺序。然后,您可以使用TreeMap或将比较器传递给TreeMap。这是一个摘要。
private static String getLastId() {
Map<Integer, String> map = new TreeMap<Integer,String>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
return ((TreeMap<Integer, String>) map).lastEntry().getValue();
}
在此处查看LinkedHashMap和TreeMap的文档。
答案 2 :(得分:0)
我可以看到您增加了id
作为地图的关键。因此,要获取您的最后一个ID ,您有两个选择:
LinkedHashMap
,然后获取所有密钥并获取最后一个密钥TreeMap
与反序比较器一起使用,然后获取第一个密钥(该密钥将具有较高的值,即最后一个密钥)。Map<Integer, CompTypes> mapCompTypes = new TreeMap<>(Comparator.reverseOrder());
final class CompTypes {
private final int androidId;
private final AndroidViewComponent component;
private final String text;
private final String type;
CompTypes(AndroidViewComponent component, String type) {
this.androidId = component.getView().getId();
this.component = component;
this.type = type;
this.text = component.Text();
}
}
public void SendMessage(HVArrangement container, String message, String datetime, int fontSize, int fontColor, int alignment, int startid) {
int id = Integer.parseInt(ChatBox.this.GetLastId());
mapCompTypes.put(id, new CompTypes(createCompTypes(createTextBox(id, message, fontSize, fontColor)), compType));
mapCompTypes.put(id + 1, new CompTypes(createLabel(id, datetime)));
}
private CompTypes createCompTypes(AndroidViewComponent component) {
return new CompTypes(component, compType)
}
private TextBox createTextBox(int id, String message, int fontSize, int fontColor) {
TextBox textBox = new TextBox(vertical);
textBox.getView().setId(id);
textBox.Text(message);
textBox.FontSize(fontSize);
textBox.TextColor(fontColor);
textBox.MultiLine(true);
textBox.Enabled(false);
textBox.RequestFocus();
return textBox;
}
private Label createLabel(int id, String datetime) {
Label label = new Label(vertical);
label.getView().setId(id);
((TextView)dt.getView()).setText(android.text.Html.fromHtml(datetime));
label.HTMLFormat(true);
label.Text(datetime);
label.getView().setOnClickListener(this);
label.getView().setOnLongClickListener(this);
return label;
}
public String GetLastId() {
int lastId = mapCompTypes.isEmpty() ? -1 : mapCompTypes.keySet().iterator().next();
//return ids;
}
答案 3 :(得分:-1)
我建议您使用TreeMap代替,在那里您可以使用lastEntry()方法。
Map<Integer, CompTypes> mapCompTypes = new TreeMap();
mapCompTypes.lastEntry()