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

我不知道哪个收藏最适合我。

这样,该类使用的集合称为“运动”
它具有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等。直到运动结束。

我对集合有一些要求:


我可以选择做几套-根据练习可以是4或5或3。
其次,我希望它具有可读性,因为之后我希望将数据存储在带有此模板的文件中:

“描述:” +描述+ \ t + WeightOFSet1 + \ t + NumberOFRepInSet1 + \ t + .....“

直到最后一个代表-我的意思是我想放弃toString功能,但仍然希望可以很好地访问集合的内部变量。


例如,当我选择HashMap时,我了解到,如果我将密钥设置为权重,那将是不正确的,因为:


如果我在一组中具有两次相同的权重,则不会保存第二个权重-因为Hashmap仅为一组键保存一组权重!
我将无法按顺序保存它,因为我只能使用接受键的函数get来获取它的值。

最佳答案

您应该创建一个名为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"))

10-07 18:44