Внедрение собственного приложения «Упражнения для помощников» - Рассмотрение коллекций - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь реализовать собственное приложение для тренировок в спортзале.

Я столкнулся с сомнением, какая коллекция подойдет мне больше всего.

SO, класс, использующий коллекцию под названием «Упражнение», и он имеет 3 переменные, как описано:

public class Exercise {

private String description;
private Map<Double, Integer> WeightsNRep;
private char category;

public Exercise(String description, char category){
    this.description=description;
    WeightsNRep = new HashMap<>();
    this.category = category;
}

, как вы можете видеть, он содержит три переменные, одной из которых является описание, и интересной является WeightsNRep - который должен содержать данные каждого набора - это означает, что он будет содержать WeightOFSet1, NumberOFRepInSet1, WeightOFSet2, NumberOFRepInSet2, ... пока упражнение не закончится.

У меня есть несколько требований из коллекции:

  1. Я могу выбрать, сколько подходов сделать - это может быть 4, 5 или 3 в зависимости от упражнения.
  2. во-вторых, я хочу, чтобы он был читабельным, поскольку впоследствии я хочу сохранить данные в файле с этим шаблоном:

    "Описание:" + Описание + \ t + WeightOFSet1 + \ t + NumberOFRepInSet1 + \ t + ..... "

    до последнего повтора - и я имею в виду, что хочу переопределить функцию toString, но все же хочувнутренние переменные коллекции должны быть хорошо доступны.

Например - когда я выбрал HashMap, я понял, что, если я установлю ключ в качестве своих весов, это не будет правдой, поскольку:

  1. если бы я имел одинаковые веса дважды в одном наборе, второй не сохранился бы - поскольку Hashmap сохраняет только один набор для одного ключа!
  2. Я бы не смог сохранить этодля того, чтобы я мог просто использовать функцию получить, которая принимаетключ, чтобы получить его значение.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы должны создать класс с именем что-то вроде RepSet:

class RepSet {
  double weight;
  int reps;

  // Constructor (and any getters that may be required) omitted for brevity.
}

и сохранить их список в поле WeightsNRep.

private List<RepSet> WeightsNRep = new ArrayList<>();

Используя списоквы разрешаете иметь несколько RepSet s для одного и того же веса.

Что касается требований к строке: вам просто нужно построить это вручную.Например:

"Description : " + Description
    + WeightsNRep.stream().map(r -> r.weight + "\t" + r.reps).collect(joining("\t"))
0 голосов
/ 04 января 2019

Если вы используете Карту с весом в качестве ключа, тогда вес должен быть уникальным (потому что это ключ) для каждого набора.Вам следует рассмотреть возможность использования объекта с весом и повторениями каждого набора и поместить его в список, если для вас важен порядок LinkedList, а если нет, то ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...