gpt4 book ai didi

java - 使用 Lombok @Builder @Default @Singular 来初始化 List<>

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:06 25 4
gpt4 key购买 nike

免责声明:我是 Java 新手 :)

我正在对某些数据进行一系列选择,为了跟踪我使用的选择的每个阶段发生的情况 int柜台。这些计数器都在一个数据对象中:

public class MyCounters {
private int counter0;
private int counter1;
...
}

我还必须计算有多少候选人最终属于给定数量的类别,我用 enum 来计算.为此,我创建了 List<Integer>其中列表的索引覆盖了枚举的值。

private List<Integer> myList;

在代码的后面,我需要一个专门的方法来用零初始化列表:

for (MyEnum i : MyEnum.values()) {
myList.add(0);
}

然后在主代码中,一旦分配了最终类别,就会发生这种情况:

myCounters.getMyList().set(myEnum.ordinal(), myCounters.getList().get(myEnum.ordinal()) + 1);

有人建议我使用 Lombok 的 @Builder.Default 改进声明/初始化步骤功能(或者可能是 @Singular ),但我真的不知道如何:最后我需要初始化一个 List<Integer>enum 中的值一样多的零.真的可以使用 Lombok 的扩展来做到这一点吗?还是他们的目标有所不同?

最佳答案

Lombok 的 @Builder + @Singular自己会初始化你的List空的 ArrayList ,仅此而已(他们不会用任何元素(如零)初始化此 List)。 @Builder.Default可以做到这一点(那么你不需要 @Singular),但如果可能的话我不会走那条路。

我不完全明白你想做什么,例如不知道你是不是只有一个enum ( MyEnum ),或者如果有多个 enum .

如果你只有MyEnum , 使用与 List 不同的数据结构,你会好得多 :

  1. EnumMap 是简单的选择,因为它是 Java 原生的:

    • 初始化:EnumMap<MyEnum, Integer> myMap = new EnumMap<>(MyEnum.class)
    • 递增:myMap.merge(myEnum, 1, Integer::sum)
    • 最终结果:myMap.getOrDefault(myEnum, 0)
  2. 不过,最好的数据结构是 multiset .一个支持多集的外部库是 Guava与其 Multiset :

    • 初始化:Multiset<MyEnum> myMultiset= HashMultiset.create()
    • 递增:myMultiset.add(myEnum)
    • 最终结果:myMultiset.count(myEnum)

关于java - 使用 Lombok @Builder @Default @Singular 来初始化 List<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53595101/

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