Java Получить последний ключ из Hashmap - PullRequest
0 голосов
/ 20 декабря 2018

Ранее я извинялся, если мой вопрос классический.но так как я только что изучил Java-программирование для Android, я не совсем понял команды.

В настоящее время я делаю приложение с секцией кода следующим образом:

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.Я прочитал несколько вопросов и ответов здесь: «У карт нет последней записи, это не часть их контракта».Есть ли другой способ получить последний идентификатор?

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Я вижу, что вы увеличиваете 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;
}
0 голосов
/ 20 декабря 2018

HaspMap не сохраняет порядок. Так что невозможно получить какой-либо элемент через позицию last, first или middle.

Одна вещь, которую вы можете сделать, это сохранить ваш key в некоторой переменной, когда делаете вставку в HashMap, и получить доступ к этой переменной, чтобы получить ключ вашего последнего объекта.Для гарантийного заказа вы также можете посмотреть LinkedHashMap

0 голосов
/ 20 декабря 2018

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 .

0 голосов
/ 20 декабря 2018

Я бы предложил вам вместо этого использовать TreeMap, где вы можете использовать метод lastEntry ().

Map<Integer, CompTypes> mapCompTypes = new TreeMap();
mapCompTypes.lastEntry()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...