Java 使用Lombok@Builder@Default@Singular初始化列表<&燃气轮机;
免责声明:我对Java有点陌生:) 我在一些数据上运行了一组选择,为了跟踪选择的每个阶段发生了什么,我使用了Java 使用Lombok@Builder@Default@Singular初始化列表<&燃气轮机;,java,lombok,Java,Lombok,免责声明:我对Java有点陌生:) 我在一些数据上运行了一组选择,为了跟踪选择的每个阶段发生了什么,我使用了int计数器。这些计数器都位于数据对象中: public class MyCounters { private int counter0; private int counter1; ... } 我还必须计算在给定数量的类别中有多少候选人,我用enum来解释这些类别。为此,我创建了List,其中列表的索引包含枚举的值 private List<Integer
int
计数器。这些计数器都位于数据对象中:
public class MyCounters {
private int counter0;
private int counter1;
...
}
我还必须计算在给定数量的类别中有多少候选人,我用enum
来解释这些类别。为此,我创建了List
,其中列表的索引包含枚举的值
private List<Integer> myList;
在主代码中,一旦分配了最终类别,就会发生以下情况:
myCounters.getMyList().set(myEnum.ordinal(), myCounters.getList().get(myEnum.ordinal()) + 1);
我被建议使用Lombok的@Builder.Default
功能(或者可能是@Singular
)来改进声明/初始化步骤,但我真的不知道该怎么做:最后我需要将列表
初始化为与枚举
中的值一样多的零。
使用Lombok的扩展真的可以做到这一点吗?或者它们是针对不同的对象吗?Lombok的
@Builder
+@Singular
将使用空的ArrayList
初始化您的列表,仅此而已(它们不会使用任何元素(如零)初始化此列表
)<代码>@Builder.Default
可以做到这一点(您不需要@Singular
),但如果可能的话,我不会遵循这条路径
我不完全理解您想要做什么,例如,我不知道您是否只有一个enum
(MyEnum
),或者是否有多个enum
如果您只有MyEnum
,那么使用与List
不同的数据结构会比好得多:
- 初始化:
enummapmymap=newenummap(MyEnum.class)
- 递增:
myMap.merge(myEnum,1,Integer::sum)
- 最终结果:
myMap.getOrDefault(myEnum,0)
- 初始化:
Multiset myMultiset=HashMultiset.create()
- 递增:
myMultiset.add(myEnum)
- 最终结果:
myMultiset.count(myEnum)
老实说,我建议采用不同的体系结构:
- 考虑不使用。如果您只关心“一”个时间点,那么它可以正常工作,但是如果您以某种方式持久化数据,那么当您想要比较不同的持久化数据时(同时更改了枚举),情况就会发生变化 也许可以考虑。
意思:使用
地图
数数东西。检索计数器,调用其add()
方法,完成 坚持您的体系结构,我想您必须在使用Lombok的类中初始化列表。这可以通过以下方式实现:
@Builder
public class Foo {
@Builder.Default
private List<Integer> myList = Arrays.asList(0, 0, 0);
}
@Builder
公开课Foo{
@Builder.Default
私有列表myList=Arrays.asList(0,0,0);
}
Arrays.asList
是使用标准Java库用默认值初始化列表的方法。我知道使用名为Arrays的类而不是List或Collection可能会有点混乱,但是您可以找到有关其Javadoc(java8的doc)的更多信息。初始化的结果是一个三个整数设置为0的列表。你只需要放尽可能多的东西
在myList
字段上使用注释@Builder.Default
,是为了让构建器构造函数知道默认初始化,否则Lombok的构建器将跳过该初始化
为了简单起见,我只包含了初始化列表和生成器的非常具体的代码。请注意,您可能还希望结合使用Lombok注释@Data和@AllArgsConstructor
你可以在上找到更多信息,我不知道是谁给了你这个建议,但听起来像是坏建议。我看不出这有什么关系。你最好让告诉你的人给你举个例子,因为这似乎对你没有帮助。非常感谢@Niccolò这是非常有用的,我想这确实是我试图做的(没有成功)!!我认为元素的数量应该是硬编码的,而不是根据枚举中的元素设置的,所以我将尝试一下我收到的其他一些建议。是的,我已经在使用
@Data
和其他注释:)非常感谢!这不是我想要的,但绝对比我想的要好!!我使用了EnumMap
,效果很好(解决了我试图解决的另一个小问题),非常感谢您的评论!我开始了解Java,每一条信息都很有用!尽管如此,我还是决定使用@TomaszLinkowski建议的EnumMap
@Builder
public class Foo {
@Builder.Default
private List<Integer> myList = Arrays.asList(0, 0, 0);
}