我有這樣的流,
List<String> test = Arrays.asList("1", "2,", "3");
test.stream().map(t -> {
try {
validate(t);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e);
}
return true;
})
如果出現例外,我想將其存盤在某個地方,處理下一個元素,然后一次顯示所有例外。這可能嗎?
uj5u.com熱心網友回復:
好吧,不要重新拋出例外:
var exceptions = test.stream().map(t -> {
try {
validate(t);
} catch (Exception e) {
return e;
}
return null;
})
.filter(Objects::nonNull) // if you don't need to preserve the index
.toList();
uj5u.com熱心網友回復:
我稍微修改了你的代碼。您的主要問題是您在捕獲該例外時會重新拋出該例外-這將在第一個例外處停止處理。然后你需要一些方法來存盤導致錯誤的輸入(這就是invalidInputs目的。我假設你的下一步是實際使用該輸入的結果進行轉換,否則你不需要使用map(),所以我的“驗證”方法也只是進行轉換。我使用 JUnit 測驗工具來處理這樣的東西,我把它們留在了assert()s 中;你應該把它們(和@Test注釋)拿出來作為你的代碼。
//throws NumberFormatException if input doesn't parse into an integer
public static Integer validate(String input) throws Exception{
return Integer.parseInt(input);
}
@Test
public void testStreamMap() {
List<String> test = Arrays.asList("1", "2,", "3");
List<String> invalidInputs = new ArrayList<>();
List<Integer> result= test.stream().map(t -> {
Integer localResult;
try {
localResult=validate(t);
} catch (Exception e) {
invalidInputs.add(t);
localResult=null;
}
return localResult;
}).collect(Collectors.toList());
assertTrue(invalidInputs.contains("2,"));
assertFalse(result.contains(2));
}
uj5u.com熱心網友回復:
您可以嘗試這種方法來收集串列中的所有例外,如下所示:
這里,
forEach我已經使用并在串列中迭代了,在串列中catch添加了例外。elistOfExceptions
- 由于我在串列中輸入了三個無效輸入,因此它在串列的末尾給出了三個例外,對應于每個給出例外的元素。
- 出于演示目的,我又創建了一個串列
listOfElementsWithoutExceptions,顯示無任何例外處理的元素。
注意: 您可以使用自己的自定義例外串列來代替List<Exception>.
public class Test2 {
public static void main(String[] args) {
List<String> test = Arrays.asList("test1", "test2", "3","4","test5","6");
List<Exception> listOfExceptions = new ArrayList<>();
List<String> listOfElementsWithoutExceptions = new ArrayList<>();
test.forEach(t -> {
try {
validate(t);
listOfElementsWithoutExceptions.add(t);
} catch (Exception e) {
listOfExceptions.add(e);
}
});
System.out.println("list of exceptions:: " listOfExceptions);
System.out.println("list of elements without exceptions:: " listOfElementsWithoutExceptions);
}
private static void validate(String t) {
Integer.parseInt(t);
}
}
輸出:
list of exceptions::
[java.lang.NumberFormatException: For input string: "test1",
java.lang.NumberFormatException: For input string: "test2",
java.lang.NumberFormatException: For input string: "test5"]
list of elements without exceptions:: [3, 4, 6]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520508.html
標籤:爪哇春天
上一篇:有誰知道如何從javaSpringBoot中的物體表類中獲取屬性?
下一篇:MyBatisSpringbootMultiDataSourceSQLException:CannotcreatePoolableConnectionFactory(IOError:Connectio
