将此递归结构从Python移植到Java时要使用哪些数据类型
在Python中,我有这样一个递归结构:将此递归结构从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
[{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
的接口来调用这三者之间的共同点。然后,有三个实现类与当前的三种类型相对应
-这可能会扩展一个映射,因为它对应于Python字典mystructurelement
{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绝对正确。在实际情况下,我使用的是更大的字典。