仅在某些情况下从 java 中的值列表中抛出异常
Throw exception only in some cases from a list of values in java
我有一个最多包含四个元素的值列表。
我需要遍历列表并且只在某些情况下需要抛出异常。
需要抛出异常的不同场景如下
- 当空值出现在列表中间时。
一些例子是:
List<String> values = ["test1","test2",null,"test4"];
List<String> values = ["test1",null,"test3","test4"];
List<String> values = ["test1",null,null,"test4"];
- 当空值出现在列表的开头时。
一些例子是:
List<String> values = [null,"test2","test3","test4"];
List<String> values = [null,null,"test3","test4"];
List<String> values = [null,null,null,"test4"];
所有其他情况都是有效的,不应抛出异常。
有效案例是:
List<String> values = ["test1","test2","test3","test4"];
List<String> values = ["test1","test2","test3",null];
List<String> values = ["test1","test2",null,null];
List<String> values = ["test1",null,null,null];
List<String> values = [null,null,null,null];
有人可以帮忙吗?
您应该确保没有 non-null 元素出现在 null 之后。否则会抛出异常
boolean nullSeen = false;
for (String s : list) {
if (s == null) {
nullSeen = true;
} else if (nullSeen) { // for a non-null string
throw new RuntimeException("Non-null value followed a null");
}
}
对于每个元素,我们检查它是否为 null,如果是,我们设置布尔标志 nullSeen
。如果我们遇到 non-null 字符串且 nullSeen
已经设置为 true,我们将抛出异常。
如果您使用 Java 9+ 并且更喜欢基于流的解决方案,那么我们可以使用 dropWhile 方法。
boolean noNonNullValueAfterNull = list.stream()
.dropWhile(Objects::nonNull) //dropWhile(s -> s != null)
.allMatch(Objects::isNull); //allMatch(s -> s == null)
if (!noNonNullValueAfterNull) {
throw new RuntimeException("Non-null value followed a null");
}
从列表创建的流中,它删除元素的前缀,直到它看到 null。流中的其余元素必须为 null 才能使 return 值为 true.
注意:对于空流(所有空值),它将 return true 这也是我们想要的。
我有一个最多包含四个元素的值列表。 我需要遍历列表并且只在某些情况下需要抛出异常。 需要抛出异常的不同场景如下
- 当空值出现在列表中间时。 一些例子是:
List<String> values = ["test1","test2",null,"test4"];
List<String> values = ["test1",null,"test3","test4"];
List<String> values = ["test1",null,null,"test4"];
- 当空值出现在列表的开头时。 一些例子是:
List<String> values = [null,"test2","test3","test4"];
List<String> values = [null,null,"test3","test4"];
List<String> values = [null,null,null,"test4"];
所有其他情况都是有效的,不应抛出异常。 有效案例是:
List<String> values = ["test1","test2","test3","test4"];
List<String> values = ["test1","test2","test3",null];
List<String> values = ["test1","test2",null,null];
List<String> values = ["test1",null,null,null];
List<String> values = [null,null,null,null];
有人可以帮忙吗?
您应该确保没有 non-null 元素出现在 null 之后。否则会抛出异常
boolean nullSeen = false;
for (String s : list) {
if (s == null) {
nullSeen = true;
} else if (nullSeen) { // for a non-null string
throw new RuntimeException("Non-null value followed a null");
}
}
对于每个元素,我们检查它是否为 null,如果是,我们设置布尔标志 nullSeen
。如果我们遇到 non-null 字符串且 nullSeen
已经设置为 true,我们将抛出异常。
如果您使用 Java 9+ 并且更喜欢基于流的解决方案,那么我们可以使用 dropWhile 方法。
boolean noNonNullValueAfterNull = list.stream()
.dropWhile(Objects::nonNull) //dropWhile(s -> s != null)
.allMatch(Objects::isNull); //allMatch(s -> s == null)
if (!noNonNullValueAfterNull) {
throw new RuntimeException("Non-null value followed a null");
}
从列表创建的流中,它删除元素的前缀,直到它看到 null。流中的其余元素必须为 null 才能使 return 值为 true.
注意:对于空流(所有空值),它将 return true 这也是我们想要的。