Map.Entry<> java

Я понятия не имею о java, но я нашел это руководство по блокчейну в java, и я пытался понять и преобразовать код в C++ (мое дело). До сих пор у меня все было хорошо, но я застрял здесь. Я не могу понять это для цикла и Map.Entry<>. Любая помощь приветствуется.

А еще я новичок в блокчейне. Ссылка на это руководство: https://medium.com/programmers-blockchain/creating-your-first-blockchain-with-java-part-2-transactions-2cdac335e0ce

Если это поможет.

Вот код:

public class Wallet {
public PrivateKey privateKey;
public PublicKey publicKey; 
public HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();
public float getBalance() {
    float total = 0;    
    for (Map.Entry<String, TransactionOutput> item: NoobChain.UTXOs.entrySet()){
        TransactionOutput UTXO = item.getValue();
        if (UTXO.isMine(publicKey)) { //if output belongs to me ( if coins belong to me )
            UTXOs.put(UTXO.id,UTXO); //add it to our list of unspent transactions.
            total += UTXO.value ; 
        }
    }  
    return total;
}

Что это за цикл делает, я не понимаю. Если бы кто-нибудь мог предоставить более простую версию этого цикла на С++.

C++ имеет шаблоны, которые характеризуются синтаксисом Type<AnotherType> и foreach (for (Type variable : anotherVariable)). Так что непонятно, чего вы не понимаете в этом.

Algirdas Preidžius 31.01.2019 17:22

Внутренняя карта java имеет записи. В вашем случае вы перебираете набор записей.

Evgeni Enchev 31.01.2019 17:23

Вы понимаете синтаксис for (std::map<string, transaction_output>::value_type item : NoobChain.UTXOs) { ... } (обратите внимание, что есть гораздо лучшие способы написать это на C++, это просто закрывающий)?

Dan M. 31.01.2019 17:25

Это просто пара ключ-значение. Для каждой пары ключ-значение в NoobChain.UTXOs, если транзакция принадлежит мне, добавьте ее в список UTXO этого кошелька и увеличьте общую сумму.

Michael 31.01.2019 17:27

Запись представляет собой пару ключ/значение. Вы можете найти это проще и быстрее в Интернете. Другие используемые концепции (циклы и условия) существуют в C++.

jhamon 31.01.2019 17:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
85
1

Ответы 1

Вместо того, чтобы просто предоставить фрагмент кода C++, позвольте мне попытаться объяснить это: В java есть структуры данных, называемые картами, которые содержат пары ключ-значение (вы, наверное, догадались об этой части). Сама карта не является итерируемой, поэтому для циклического просмотра карты вы можете перебрать все ее ключи (также называемые набором ключей), все значения или все пары ключ-значение (также известные как набор записей). Последнее происходит в вашем примере. Итак, в вашем примере у вас есть карта объектов String (ключи) и TransactionOutput (значения). for, перебирает эти пары, и каждая пара сохраняется в элементе переменной. Затем часть значения извлекается из пары ключ-значение (элемент), которая является объектом TransactionOutput. Затем этот объект проверяется с помощью метода isMine(), и если это верно, он добавляется в другую карту (вызывает UTXO), которая сопоставляет строки (ключ) с объектом TransactionOutput. В этом случае кажется, что строка (ключ на карте) является идентификатором TransactionObject. Сумма переменной увеличивается на значение добавленного TrasactionOutput.

Примечание: этот цикл for может просто перебирать все значения на карте, поскольку ключ никогда не используется в этом конкретном цикле.

Теперь, чтобы объяснить это другими словами, он проходит через карту TransactionOutputs, те, которые принадлежат «мне», откладываются в отдельную карту, и возвращается общее количество значений TrasactionOutput, которые принадлежат «мне».

Надеюсь, это прояснит ситуацию! Удачи, Тео

эй, большое спасибо, брат .. мог бы также сказать мне, что делает эта функция entrySet ()?

raza abbas 02.02.2019 18:55

Эй, нет проблем, рад помочь. Если вы найдете ответ полезным, не забудьте проголосовать. entrySet() возвращает набор (набор без повторяющихся элементов) пар ключ-значение из карты.docs.oracle.com/javase/8/docs/api/java/util/Map.html#ent‌​rySet--

Teodor Marinescu 03.02.2019 19:48

Другие вопросы по теме