在Java中,我有一个字符串的ArrayList,例如:
[,Hi, ,How,are,you]
我想要移除掉空和null元素,应该怎样修改代码才能达到以下效果:
[Hi,How,are,you]
lukastymo的答案似乎是最好的。
但是也值得一提的是这种方法的可扩展性:
List<String> list = new ArrayList<String>(Arrays.asList("", "Hi", null, "How"));
list = list.stream()
.filter(item -> item != null && !item.isEmpty())
.collect(Collectors.toList());
System.out.println(list);
按照此定义,编写的代码具有较高的灵活性和可维护性。
.filter(item -> !item.startsWith("a"))
List<String> list = new ArrayList<String>(Arrays.asList("", "Hi", "", "How"));
Stream<String> stream = list .stream();
Predicate<String> empty = empt->(empt.equals(""));
Predicate<String> emptyRev = empty.negate();
list= stream.filter(emptyRev).collect(Collectors.toList());
或者
list = list .stream().filter(empty->(!empty.equals(""))).collect(Collectors.toList());
private List cleanInputs(String[] inputArray) {
List<String> result = new ArrayList<String>(inputArray.length);
for (String input : inputArray) {
if (input != null) {
String str = input.trim();
if (!str.isEmpty()) {
result.add(str);
}
}
}
return result;
}
// 这里我发布了两种方法,请仔细阅读
private static void consumerExample() {
List<String> list = Arrays.asList("Java", "\n \n", "Python", " ", null);
System.out.println("==================== ");
Consumer<List<String>> modify = list1 -> {
for (int i = 0; i < list1.size(); i++)
if (getOnlyStrings(list1.get(i)).length() > 0)
System.out.println(list1.get(i));
};
modify.accept(list);
System.out.println("====================");
}
public static String getOnlyStrings(String s) {
String str = "";
try {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
if (s == null || s.trim().length() == 0)
return "";
Matcher matcher = pattern.matcher(s);
str = matcher.replaceAll("");
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
public static void main(String[] args) {
consumerExample();
List<String> list = Arrays.asList("Java", "\n \n", "Python", " ", null);
List<String> collection = new ArrayList<>(Arrays.asList("A", null, "B", null, "C", "", "D"));
// collection.removeIf(s -> s == null || "".equals(s));
// System.out.println(collection);
list.stream().filter(p -> getOnlyStrings(p).length() > 0).forEach(System.out::println);
;
}