Как правильно переопределить метод equals класса ученика, чтобы HashSet мог различать дублирующиеся объекты класса ученика [duplicate]

Я считаю, что смог решить эту проблему в среде моделирования.

Прежде всего, метод onEdit, по-видимому, не работает, когда вы обращаетесь к другим таблицам SpreadSheets, поскольку это должно быть только для простых скриптов , Поэтому вам нужно создать функцию с другим именем и запустить ее как триггер, как указал SpiderPig в комментариях к вашему вопросу.

Кроме того, я считаю, что функция moveTo должна работать только внутри одного и того же SpreadSheet, поэтому вам придется использовать другой подход для этого, я использовал appendRow.

Очень полезное место для получения информации обо всем, что вам нужно в сценариях приложений Google, - это one: https://developers.google.com/apps-script/

Вот сценарий, который я использовал, чтобы заставить его работать:

function Test(e) {
  //Oficial
  var s = e.source.getActiveSheet();
  var r = e.range;
  //Test
  //var s =  SpreadsheetApp.getActiveSheet(); //Gets active Sheet.
  //var r = s.getRange(2, 1, 1, 2); //Gets first line after header.

  var targetSheet = SpreadsheetApp.openById("15V0AvU84OBmN0nQweNyYczh5UfOTX77eECzu_1Um6Ug").getSheetByName("Verified Expenses");

  //To View Logs, enter no View, Logs after the execution of the script
  Logger.log(s.getName()); 
  Logger.log(r.getColumn());
  Logger.log(r.getValue());

  if(s.getName() == "Input Expenses" && r.getColumn() == 1 && r.getValue() == "Verified") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var rangeToAdd = s.getRange(row, 1, 1, numColumns).getValues(); //Creates an Array[][], being the first dimension the rows and the second one the columns. 
    var rangeToAddFiltered = rangeToAdd[0]; //Get the first row of the array (as we will only check one by one).
    targetSheet.appendRow(rangeToAddFiltered); //Append the Row to the new SpreadSheet (moveTo appears to work only inside the same SpreadSheet).
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.deleteRow(row); //Profit!
  }
}

Не забудьте добавить тест (e) в триггер onEdit в триггерах «Ресурсы», «Текущий проект».

triggers [/g1]

Надеюсь, это вам поможет.

Обновление:

Если это все равно вам не помогает, возможно, у вас есть некоторые проблемы с разрешением (при первом запуске скрипта появляется окно с запросом разрешения для скрипта для изменения электронных таблиц). Возможно, альтернативой было бы заставить поддельное событие в фиксированном диапазоне просто уметь отлаживать функцию, чтобы увидеть, что происходит. Я добавил некоторые прокомментированные строки в приведенном выше скрипте, которые, если они не были учтены, могут быть использованы для полного запуска скрипта через интерфейс сценария для тестирования / отладки.

1
задан user9864064 16 January 2019 в 08:02
поделиться

2 ответа

Генерировать toString, hashCode и равно из Eclipse, генерировать опцию или подобную опцию из любой IDE

0
ответ дан prabhanelamalli 16 January 2019 в 08:02
поделиться

Ваш hashCode не соответствует вашей equals реализации. Если a.equals(b) истинно, a.hashCode == b.hashCode() также должно быть истиной.

Поскольку equals требует только, чтобы имена были равны, hashCode должен возвращать name.hashCode().

public int hashCode()
{
    return name.hashCode();
}
0
ответ дан Eran 16 January 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: