gpt4 book ai didi

java - 如何将唯一 ID、ID 组合映射到 Java 中清晰的编号行

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:08 26 4
gpt4 key购买 nike

我想创建一种非递归方式来创建类似于 --

1
1.1
1.2
1.2.1
1.3
2
2.1 etc etc (these items can be infinitely deep)

我拥有的唯一识别信息是一个双号 ID。第一个 ID 是标识项目的 ID,第二个 ID 标识它属于什么,零始终是文档根。

例如:

123,0
456,123
789,123
777, 789
999, 123
888,0
444,888

将被翻译成——

1
1.1
1.2
1.2.1
1.3
2
2.1

数据是内联读取的。不知道后面是什么,只知道前面是什么。我相信这应该很简单,但出于某种原因,我很难想出一个有效的解决方案。注意:这些项目将始终按顺序出现。例如,我永远不会在获得项目 1.1 之前获得项目 1.2,等等。

最佳答案

如果项目以正确的顺序出现,堆叠就可以了:

public class Item {
private int id;
private int parentId;

public Item(int id, int parentId) {
this.id = id;
this.parentId = parentId;
}

public int getId() { return id; }
public int getParentId() { return parentId; }
}

public class NumberedItem {
private Item item;
private int childCount;
private String number;

public NumberedItem(Item item, String number) {
this.item = item;
this.childCount = 0;
this.number = number;
}

public Item getItem() { return item; }
public String getNumber() { return number; }

/* package */ int incrementChildCount() {
return ++childCount;
}
}

public NumberedItemIterator implements Iterable<NumberedItem> {
private Iterator<Item> items;
private Stack<NumberedItem> numberStack;

public NumberedItemIterator(Iterable<Item> itemsIterable) {
items = itemsIterable.iterator();
numberStack = new Stack<NumberedItem>();
numberStack.push(new NumberedItem(null, null));
}

public boolean hasNext() {
return items.hasNext();
}

public NumberedItem next() {
Item current = items.next();
int parentId = current.getParentId();

NumberedItem parent = null;
while (!numberStack.empty()) {
NumberedItem candidate = numberStack.peek();
if (candidate.getItem().getId() == parentId) {
parent = candidate;
break;
}
numberStack.pop();
}

if (parent == null) throw new RuntimeException("Inconsistent ordering");

String number = Integer.toString(parent.incrementChildCount());
if (parent.getNumber() != null) {
number = parent.getNumber() + "." + number;
}

NumberedItem result = new NumberedItem(current, number);

numberStack.push(result);

return result;
}

public void remove() {
throw new UnsupportedOperationException();
}
}

关于java - 如何将唯一 ID、ID 组合映射到 Java 中清晰的编号行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com