从给定列表中导出包含其他元素的列表

时间:2017-11-04 20:38:33

标签: java list arraylist collections java-8

我正在维护一个类以保持所有字段外部化。包含多个此类值及其集合的示例类是:

public static class State {
    public static final String DRAFT = "DRAFT";
    public static final String APPROVED = "APPROVED";
    public static final String RECEIVED = "RECEIVED";
    public static final String PENDING = "PENDING";

    public static List<String> IMMUTABLE_STATES = Arrays.asList(APPROVED,RECEIVED);
    public static List<String> IRREVERSIBLE_STATES = Arrays.asList(DRAFT,RECEIEVED,PENDING);
}

可以看出IRREVERSIBLE_STATES包含IMMUTABLE_STATES所有的所有字段(状态)。另外,在这种情况下,它还有一些额外的PENDING

有没有办法优雅地初始化第二个列表,以便它直接从第一个列表中获取值而不是再次声明所有常见状态?我是否必须编写一种方法来实现这一目标?可以作为初始化程序在一行中完成吗?

2 个答案:

答案 0 :(得分:4)

如何使用流?

1 2 3 4
1 2 3 5
1 2 3 6
...
1 14 15 16
2 3 4 5
...
12 14 15 16
13 14 15 16

此外,您的&#34;州&#34;感觉他们应该是public static List<String> LIST1 = Arrays.asList("1", "2"); public static List<String> LIST2 = Stream.concat(LIST1.stream(), Arrays.asList("3", "4").stream()) .collect(Collectors.toList()); ,而不是字符串。

答案 1 :(得分:1)

虽然连接流可以在这里工作, 一个更简单的解决方案是使用静态初始化器:

public static List<String> IRREVERSIBLE_STATES = new ArrayList<>(IMMUTABLE_STATES);
static {
    IRREVERSIBLE_STATES.addAll(Arrays.asList(DRAFT, PENDING));
}