Java8 - if else replacement

时间:2018-02-06 18:25:50

标签: java-8

我有2个变量存储在地图中作为List。

int value;
int[] values;

此处,int也将存储为Arrays.asList(value)

当我们得到attributesMap.get("value") - >它将作为List返回。

所以,我使用以下代码来检索值。

获取价值 - >

(Integer)attributesMap.get("value").stream().findFirst().get();

获取值 - >

(int[])attributesMap.get("values").stream().findFirst().get();

实际上,只有其中一个具有实际价值。

没有实际值的字段将保留默认值0,但这不是实际值。

对于前,

int value = 0;
int[] values = {1,2};

此处,值 - >保持真实价值和“价值”可以忽略不计。

int value = 1;
int[] values = {0};

此处,值 - >保持真实价值和“价值”可以忽略不计。

所以,我需要从上面两个字段中得到一个最终的int []数组。

逻辑,我用过,

int[] values = null;
        if (attributesMap.get("value").stream().filter(value -> ((Integer)value > 0)).count() > 0) {
            values = new int[1];
            values[0] = (Integer)attributesMap.get("value").stream().filter(value -> ((Integer)value > 0)).findFirst().get();
        }
        else if (values == null) {
            values = Arrays.stream((int[])attributesMap.get("values").stream().findFirst().get()).filter(value -> value>0).toArray();
        }

另一种方法,

int[] values = attributesMap.get("value").stream().filter(value -> ((Integer)value > 0)).count() > 0
                    ? attributesMap.get("value").stream().mapToInt(val -> (int)val).toArray()
                    : (int[])attributesMap.get("values").stream().findFirst().get();

有没有更好的方法使用Java 8而不使用if&别的?

谢谢

1 个答案:

答案 0 :(得分:3)

int value = (int) attributesMap.get("value").get(0);
int[] values = value > 0 ? new int[] { value } : (int[]) attributesMap.get("values").get(0);

Streams对于这个问题来说太过分了,已经有了获取列表中第一个值的方法。