当前位置: 首页 > 知识库问答 >
问题:

查找多层子层的值(使用循环???)

缪兴腾
2023-03-14

我不知道如何搜索这个,所以真的没有成功。我将从我拥有的数据类开始,

以下是培训计划实体(示例)

@Data
@Entity
@Table(name = "TRAINING_PLAN")
@JsonIgnoreProperties({"trainings"})
public class TrainingPlan {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;

@Column(name = "CURRENT_PHASE")
private int currentPhase;

@Column(name = "PREVIOUS_TRAINING_PLAN_ID")
private Long previousTrainingPlanId;

@OneToMany(mappedBy = "trainingPlan", fetch = FetchType.LAZY)
private List<Training> trainings = new ArrayList<Training>();

以下是培训实体(示例)

@Data
@Entity
@Table(name = "TRAINING")
public class Training {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TRAINING_PLAN_ID")
private TrainingPlan trainingPlan;

我希望我能够清楚地解释这一点,所以我在这里试图实现的是从所有以前的(培训计划)阶段获得培训。

工作原理——当创建下一个(新培训计划)计划阶段时,它会使用之前的PlanID引用旧计划,以便识别其父计划(类似的层)。

例如,如果TrainingPlan有第2阶段,我可以很容易地从第1阶段获得类似的培训:

    public List<Training> trainingsFromPreviousPhase(TrainingPlan plan, List<TrainingPlan> planList) {
    List<Training> previousPhaseTrainings = new ArrayList<Training>();

    if (plan.getPreviousTrainingPlanId() != null) {
        TrainingPlan previousPlanPhase = planList.parallelStream()
                .filter(e -> e.getId() == plan.getPreviousTrainingPlanId()).findAny().get();
        previousPhaseTrainings = previousPlanPhase.getTrainings();

}
    return previousPhaseTrainings;
}

现在的问题是,如果一个计划处于第5阶段,我需要从所有前4个阶段获得培训,这就是我陷入困境的地方,想不出一种自动循环的方法。我希望我解释的不是太难理解。欢迎任何建议或问题。

我在这里需要的是类似于:

List<List<Training>> getTrainingsFromAllPreviousPhases()

共有1个答案

谯乐池
2023-03-14

您可以像这样循环执行所有计划阶段:

TrainingPlan currentPlan = plan;
List<Training> allTrainings = new ArrayList<>();
while (cirrentPlan.getPreviousTrainingPlanId() != null) {
    TrainingPlan previousPlanPhase = planList.parallelStream()
        .filter(e -> e.getId() == currentPlan.getPreviousTrainingPlanId()).findAny().get();
    allTrainings.addAll(previousPlanPhase.getTrainings());
    currentPlan = previousPlanPhase;
}

然而,为了避免重复浏览计划列表以通过id找到一个,我建议将它们保存在地图中:

Map<Long, TrainingPlan> planMap = planList.stream()
    .collect(Collectors.toMap(TrainingPlan::getId, Function.identity());

然后可以简化代码(视觉上和O(n)复杂度方面):

TrainingPlan currentPlan = plan;
List<Training> allTrainings = new ArrayList<>();
while (currentPlan.getPreviousTrainingPlanId() != null) {
    TrainingPlan previousPlanPhase = planMap.get(currentPlan.getPreviousTrainingPlanId());
    allTrainings.addAll(previousPlanPhase.getTrainings());
    currentPlan = previousPlanPhase;
}
 类似资料:
  • Recurrent层 所有的循环层(LSTM,GRU,SimpleRNN)都继承本层,因此下面的参数可以在任何循环层中使用 SimpleRNN层 GRU层 LSTM层 ConvLSTM2D层 SimpleRNNCell层 GRUCell层 LSTMCell层 StackedRNNCells层 CuDNNGRU层 CuDNNLSTM层

  • Recurrent层 keras.layers.recurrent.Recurrent(return_sequences=False, go_backwards=False, stateful=False, unroll=False, implementation=0) 这是循环层的抽象类,请不要在模型中直接应用该层(因为它是抽象类,无法实例化任何对象)。请使用它的子类LSTM,GRU或Simp

  • 然而,我研究了API和公共库以及github的细节,但我找不到任何方法来: 检索所有公共存储库/映像(即使有数千个,我仍然需要一个开始列表来迭代) 查找图像的所有层 查找层的大小(因此不是图像,而是单个层的大小)。 谁能帮我找到检索这些信息的方法吗?

  • 问题内容: 该表表示类别层次结构,层次结构顶部的元素的父ID为NULL。该表如下所示: 我正在尝试做的是建立一个SQL查询,这将使我返回: 任何给定[categoryId]的[categoryId],[categoryName]链。它应该循环并获取每一行,直到到达具有parentId == NULL的行为止。 如上面的示例示例234-> 91-> 35-> 20-> 1-> NULL(STOP)

  • 我试图满足几个使用FFMPEG构建视频文件的分层场景。 场景1:将一个视频(指定视频的不透明度)覆盖在一个图像的顶部,作为结果创建一个新的视频。 我用以下方法解决了这个问题: 我正在将视频缩放到3840x2160以匹配我的图像(理想的情况下,我会让它们事先匹配)。 场景2:现在有3层,视频-图像-图像。中间的图像层是带有文字的透明图像。所以我们有一个基础图像,上面覆盖了文本,在一定的不透明度下有一

  • [source] RNN keras.layers.RNN(cell, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False) 循环神经网络层基类。 参数 cell: 一个 RNN 单元实例。RNN 单元是一个具有以下几项的类: 一个 call(input_at_