总结:我有一棵包含汽车零件的树,我需要从中构建这些零件的所有有效组合。
零件可能是必需的 - 每个构建都必须包含它们。
部分可以是可选的。
部分可能与其他部分冲突。
部件内部可以有可选部件。
示例树:
Car
| - Motor (required)
| - - V8
| - - V12
| - - - Colour (optional)
| - - - - Black
| - - - - Chrome
| - Transmission (required)
| - - Mechanical
| - - Automatic
| - Wheels (optional)
| - - Basic
| - - Fancy
| - - - Colour (optional)
| - - - - Red
| - - - - Blue
| - BodyStyle (optional)
| - - Hatchback (conflicts with Motor.V12)
| - - Buggy (conflicts with Motor.V8)
这棵树的有效构建:
Car | Motor.V8 | Transmission.Automatic
Car | Motor.V8 | Transmission.Automatic | Wheels.Basic
Car | Motor.V12.Colour.Black | Transmission.Automatic | Wheels.Basic
Car | Motor.V8 | Transmission.Automatic | BodyStyle.Hatchback
Car | Motor.V12 | Transmission.Mechanical | Wheels.Fancy | BodyStyle.Buggy
Car | Motor.V12 | Transmission.Mechanical | Wheels.Fancy.Colour.Red | BodyStyle.Buggy
我应该朝着什么方向去解决这个任务?
这应该是一项相对容易的任务,但我什至不知道从哪里开始。
最佳答案
鉴于您询问如何开始,这里有一个建议:
- 从一个接口(interface)开始,该接口(interface)表示您可能需要查询的有关节点的任何内容
- 编写该接口(interface)的最简单实现(例如,您的“蓝色”叶节点)。包括单元测试以确保它能满足您的要求。
- 继续遍历其余节点,直到它们都按照您的预期进行。
- 现在编写一个全新的类来生成所有变体,仅使用接口(interface)方法。
关于java - 遍历树收集节点组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949875/