实施我自己的Exercising Helper App-收藏注意事项

时间:2019-01-04 08:40:10

标签: java android collections

我正在尝试实现自己的运动应用,以便在健身房使用。

我不禁怀疑哪个系列最适合我。

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. 我将无法按顺序保存它,因为我只能使用接受键的函数get来获取其值。

2 个答案:

答案 0 :(得分:1)

如果您使用以权重作为关键点的Map,则每个集合的权重必须唯一(因为这是关键点)。如果顺序对您很重要,则应该考虑使用一个对象,该对象具有每个集合的权重和重复次数,并将其放置在列表中,如果顺序对您而言很重要,那么它就不是一个ArrayList。

答案 1 :(得分:1)

您应该创建一个名为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拥有相同的重量。

关于字符串的要求:您只需要手动构建即可。例如:

"Description : " + Description
    + WeightsNRep.stream().map(r -> r.weight + "\t" + r.reps).collect(joining("\t"))