我有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&别的?
谢谢
答案 0 :(得分:3)
int value = (int) attributesMap.get("value").get(0);
int[] values = value > 0 ? new int[] { value } : (int[]) attributesMap.get("values").get(0);
Streams对于这个问题来说太过分了,已经有了获取列表中第一个值的方法。