的元素转换为 Integer 对象。然而,`Integer.parseInt()` 方法会抛出 `NumberFormatException` 异常,如果传入的参数不是一个合法的整数值。
当我们使用 `for-each` 循环遍历 List 时,每个元素都会被尝试转换为 Integer 对象。如果其中一个元素不是一个合法的整数值,`Integer.parseInt()` 方法会抛出异常,而 Java 会将其视为 null 值。
**解决方案**
为了避免这个问题,我们可以使用 `try-catch`语句捕获 `NumberFormatException` 异常,并在捕获到异常时设置一个默认值:
javaList integerList = new ArrayList<>();
for (String str : list) {
try {
integerList.add(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 integerList.add(0);
}
}
或者,我们可以使用 `Optional` 类来处理可能为 null 的值:
javaList integerList = new ArrayList<>();
for (String str : list) {
Optional optional = Optional.ofNullable(Integer.parseInt(str));
if (optional.isPresent()) {
integerList.add(optional.get());
} else {
// 设置一个默认值,例如0 integerList.add(0);
}
}
**总结**
当我们尝试将 List 的元素转换为其他类型的对象时,如果其中一个元素不是一个合法的整数值,会得到 null 值。为了避免这个问题,我们可以使用 `try-catch`语句捕获异常,并设置一个默认值,或使用 `Optional` 类来处理可能为 null 的值。
**相关代码示例**
* 使用 `try-catch`语句:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = new ArrayList<>();
for (String str : list) {
try {
integerList.add(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 integerList.add(0);
}
}
System.out.println(integerList); // [0,0,0]
* 使用 `Optional` 类:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = new ArrayList<>();
for (String str : list) {
Optional optional = Optional.ofNullable(Integer.parseInt(str));
if (optional.isPresent()) {
integerList.add(optional.get());
} else {
// 设置一个默认值,例如0 integerList.add(0);
}
}
System.out.println(integerList); // [0,0,0]
* 使用 `Stream` API:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> {
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return0;
}
})
.collect(Collectors.toList());
System.out.println(integerList); // [0,0,0]
* 使用 `map` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> Integer.parseInt(str))
.mapToInt(Integer::intValue)
.boxed()
.collect(Collectors.toList());
System.out.println(integerList); // [0,0,0]
* 使用 `flatMap` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return Optional.empty();
}
})
.flatMap(Optional::stream)
.collect(Collectors.toList());
System.out.println(integerList); // [0,0,0]
* 使用 `map` 和 `filter` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> Integer.parseInt(str))
.filter(i -> i >=0)
.collect(Collectors.toList());
System.out.println(integerList); // []
* 使用 `flatMap` 和 `filter` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return Optional.empty();
}
})
.flatMap(Optional::stream)
.filter(i -> i >=0)
.collect(Collectors.toList());
System.out.println(integerList); // []
* 使用 `map` 和 `reduce` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
Integer result = list.stream()
.map(str -> Integer.parseInt(str))
.reduce(0, (a, b) -> a + b);
System.out.println(result); //0
* 使用 `flatMap` 和 `reduce` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
Integer result = list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return Optional.empty();
}
})
.flatMap(Optional::stream)
.reduce(0, (a, b) -> a + b);
System.out.println(result); //0
* 使用 `map` 和 `collect` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> Integer.parseInt(str))
.collect(Collectors.toList());
System.out.println(integerList); // [0,0,0]
* 使用 `flatMap` 和 `collect` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
List integerList = list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return Optional.empty();
}
})
.flatMap(Optional::stream)
.collect(Collectors.toList());
System.out.println(integerList); // [0,0,0]
* 使用 `map` 和 `forEach` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
.map(str -> Integer.parseInt(str))
.forEach(i -> System.out.println(i));
System.out.println(); //0,0,0
* 使用 `flatMap` 和 `forEach` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
// 设置一个默认值,例如0 return Optional.empty();
}
})
.flatMap(Optional::stream)
.forEach(i -> System.out.println(i));
System.out.println(); //0,0,0
* 使用 `map` 和 `allMatch` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
boolean result = list.stream()
.map(str -> Integer.parseInt(str))
.allMatch(i -> i >=0);
System.out.println(result); // false
* 使用 `flatMap` 和 `allMatch` 方法:
javaList list = Arrays.asList("apple", "banana", "cherry");
boolean result = list.stream()
.map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {