【发布时间】:2018-01-12 11:46:15
【问题描述】:
我无法为这个问题找到一个好的线程名称:C 我有具有两个长值字段的对象列表:
class ObjectFromDb {
Long dbUserId;
Long apiUserId;
}
例如。它可能看起来像这样:
List<ObjectFromDb> dbList = {
{1, 1},
{2, 2},
{2, 3},
{3, 4},
{4, 4},
{5, 4},
{6, 5}
}
目标是将此列表分组为关系。可能性是: 一对一,一对多,多对一。不允许多对多。
我的最终目标:
class FinalObject {
List<Long> dbIds;
List<Long> apiIds;
}
所以结果列表应该是:
List<FinalObject> finalList = {
{ {1} , {1} },
{ {2} , {2,3} },
{ {3,4,5}, {4} },
{ {6} , {5} }
}
这是我的问题。有什么算法可以解决这样的问题吗?或者,如果有人知道如何处理它?我试图解决它,但它以十亿个 if 和 for 循环结束,所以我重新开始并以另外十亿个循环结束..
【问题讨论】:
-
如何解决冲突?例如,如果您添加对 {3, 2} 它可以添加为 {3, {2, 4}} 和 {{2, 3}, 2},它将适合两个位置。
-
如果某个数字在左侧,则无法再次添加。与正确的多头相同
-
所以你可能会在分组过程中失去一些关系?
-
如果它像在finalList中,我将添加{3,2}这个值应该被删除,因为3已经有一个关系({3,4,5 }-{4} 和 2 已经有关系({2}, {2,3})
-
就像 SaiBot 说的:你根本无法从
relation({3,4,5},{4})重构{3,2}。您只能从relation({2}, {2,3})重构{2,3},但不能重构{3,2}。
标签: java algorithm list stream converter