如何在java中创建分层数据对象
我已从第三方数据库收到以下数据集如何在java中创建分层数据对象,java,algorithm,data-structures,Java,Algorithm,Data Structures,我已从第三方数据库收到以下数据集 AccNo AccName CurrentRef PrevRef TimeStamp 001 FCA 001 0 T00 001 FCB 002 001 T01 021 FCA 003 002 T02 011 XZA 012 0 T00 011 XZC 013
AccNo AccName CurrentRef PrevRef TimeStamp
001 FCA 001 0 T00
001 FCB 002 001 T01
021 FCA 003 002 T02
011 XZA 012 0 T00
011 XZC 013 012 T01
022 YAA 021 0 T00
要识别一个帐户,我们需要跟踪该帐户以前的所有引用。如果其先前引用为0,则表示它是数据集中帐户的第一个条目。根据上述数据集
前三行属于一个帐户。(当前参考-003,其先前参考-002001)
第四行和第五行属于另一个帐户。(当前参考-013,当前参考-012)
等等
我需要一个集合,它可以根据PreviousRef对这些数据进行分组,以便在单个对象中接收以下信息
(AccountNo-latest, Complete VO (AccNo, AccName, CurrentRef, PrevRef, TimeStamp)-latest, List of Previous References)
对于上述数据集,T02是最新的时间戳,T00是最早的时间戳。如果记录的CurrentRef不属于任何记录的PrevRef,则该记录为最新记录。我需要在下面的列表结果-
[021, (021, FCB, 003, 002, T02), (002,001)],
[011, (011, XZC, 013, 012, T01), (012)],
[022, (022, YAA, 021, 0, T00), ()]
您在评论中说,这些记录没有唯一标识符。这是个问题 我们不仅可以处理重复的元素,而且还有一个更大的问题 运行无限递归的可能性,即。 记录A的前一个记录是记录B,记录B的前一个记录是记录A。更不用说其他任意重复、向前和向后的循环了 <> P>而不是像现在那样解决这个问题,考虑修改你的结构,所以有一个唯一的标识符。 如果存在唯一标识符,我们可以通过将每个记录转换为链表节点、使用该唯一标识符重写Object.hashcode()、并将其插入到HashMap(这是一个O(1)操作)中来轻松解决此问题。如果前面的ref为0,我们可以在这里停止。如果没有,我们还希望访问位于前一个ref的HashMap节点,并将其设置为当前节点的下一个。这样我们就有了节点的面包屑痕迹。这也是另一个恒定时间O(1)操作 因此,为了将所有记录放入HashMap,我们花费了O(n)个时间构建面包屑HashMap 之后,我们可以执行另一个O(n)遍历来收集所需的列表 比如:
List result = hashmap.filter(node -> node.previous == null).collect(Collectors.toList())
接收原始节点列表(自构建面包屑以来,这些节点具有指向其下一个引用的链接)
这可能是2*O(n)=O(n)时间内最干净、最快速的解决方案。在您的评论中,您说这些记录没有唯一标识符。这是个问题 我们不仅可以处理重复的元素,而且还有一个更大的问题 运行无限递归的可能性,即。 记录A的前一个记录是记录B,记录B的前一个记录是记录A。更不用说其他任意重复、向前和向后的循环了 <> P>而不是像现在那样解决这个问题,考虑修改你的结构,所以有一个唯一的标识符。 如果存在唯一标识符,我们可以通过将每个记录转换为链表节点、使用该唯一标识符重写Object.hashcode()、并将其插入到HashMap(这是一个O(1)操作)中来轻松解决此问题。如果前面的ref为0,我们可以在这里停止。如果没有,我们还希望访问位于前一个ref的HashMap节点,并将其设置为当前节点的下一个。这样我们就有了节点的面包屑痕迹。这也是另一个恒定时间O(1)操作 因此,为了将所有记录放入HashMap,我们花费了O(n)个时间构建面包屑HashMap 之后,我们可以执行另一个O(n)遍历来收集所需的列表 比如:
List result = hashmap.filter(node -> node.previous == null).collect(Collectors.toList())
接收原始节点列表(自构建面包屑以来,这些节点具有指向其下一个引用的链接)
这可能是2*O(n)=O(n)时间内最干净、最快的解决方案。CurrentRef是否唯一?这里有唯一标识符吗?没有,没有唯一标识符。CurrentRef唯一吗?这里有唯一标识符吗?没有,没有唯一标识符。谢谢你的回答。但是,我需要根据从第三方接收到的数据集准备数据。如果是这种情况,请假设一个唯一的密钥,如PrevRef。采取相同的操作过程,但是在处理每个对象时,检查它是否已经存在于HashMap中。如果有,那么应该提醒第三方,因为主题上不应该有重复的条目。如果你的第三方没有提供不好的数据,这很酷,但不要指望总是这样。谢谢你的回答。但是,我需要根据从第三方接收到的数据集准备数据。如果是这种情况,请假设一个唯一的密钥,如PrevRef。采取相同的操作过程,但是在处理每个对象时,检查它是否已经存在于HashMap中。如果有,那么应该提醒第三方,因为主题上不应该有重复的条目。如果你的第三方没有提供不好的数据,这很酷,但不要指望总是这样。