将此递归结构从Python移植到Java时要使用哪些数据类型

将此递归结构从Python移植到Java时要使用哪些数据类型,java,types,Java,Types,在Python中,我有这样一个递归结构: [{a:b},({c:d}, {e:f}, [{g:h},{i:j}])] 在这个递归结构中,{}元素是原子的,在某种意义上,当我解析这个结构并遇到{}时,我只存储它。但是,当我找到[]或()时,我会执行另一个递归步骤。在我的算法中,[]和()之间的区别在于,[]的结果字符串元素由或分隔,()的元素由和分隔。所以,看起来是这样的: [x, y, z] -> "( x OR y OR z )" (x, y, z) -> "( x AND y

在Python中,我有这样一个递归结构:

[{a:b},({c:d}, {e:f}, [{g:h},{i:j}])]
在这个递归结构中,
{}
元素是原子的,在某种意义上,当我解析这个结构并遇到
{}
时,我只存储它。但是,当我找到
[]
()
时,我会执行另一个递归步骤。在我的算法中,
[]
()
之间的区别在于,
[]
的结果字符串元素由
分隔,
()
的元素由
分隔。所以,看起来是这样的:

[x, y, z] -> "( x OR y OR z )"
(x, y, z) -> "( x AND y AND z )"
[x, y, (z, w)] - > "( x OR y OR ( z AND w ) )"

在Python中,我的算法工作得很好,并生成正确的字符串,但我甚至不确定在Java中使用什么数据类型来完成同样的任务。所以,我需要一些建议。谢谢

基本上,您正在寻找Java中Python列表的等价物。Python的列表是异构的,因此您可能会被难倒,因为Java中的列表是异构的

您需要定义的第一件事是如何调用各个元素。让我们通过创建一个名为
MyStructure
的接口来调用这三者之间的共同点。然后,有三个实现类与当前的三种类型相对应

  • mystructurelement
    -这可能会扩展一个映射,因为它对应于Python字典
    {a:b}
  • MyStructureTuple
    -这可能会扩展
    列表
    。选择您想要的实现
  • MyStructureList
    -同上
然后递归结构需要表示为

MyStructureList myList = new MyStructureList()
myList.add(new MyStructureElement())
以此类推,添加所有元素

您可能需要更改名称。那取决于你的喜好

然后,在解析时,您只需进行如下检查

element instanceof MyStructureElement
element instanceof MyStructureTuple
element instanceof MyStructureList

通过这种方式,您可以找到当前元素类型

如果它只存储2个值,为什么要使用映射?只需将MyTurcureElement设置为一个自定义类,其中包含两个带有getter和setter的私有字段或两个公共字段。@Blue我将其设置为一个映射,因为问题中有
{a:b}
,这是Python的字典。这可能是一个简单的例子,而在完整的程序中,可以使用更大的字典。@Aseem Bansal绝对正确。在实际情况下,我使用的是更大的字典。