Ваш код работает нормально, если вы замените Obj
на String
и исправите ошибки компиляции:
List<String> a = Arrays.asList("werdsegs", "wsghnmrst", "vaasdfdas", "iujhgfds");
List<String> b = new ArrayList<>(Arrays.asList("aalaksdjf", "erftghjuk", "werdsejfksd", "asdklgjaklgj", "poijgndf"));
a.forEach((item) -> {
String foo = item.substring(0,5);
for (Iterator<String> i = b.iterator(); i.hasNext(); ) {
String o = i.next();
if (foo.equals(o.substring(0,5))) {
i.remove();
}
}
});
System.out.println(b); // prints: [aalaksdjf, erftghjuk, asdklgjaklgj, poijgndf]
Как подсказал Джонатан Хайндл в другой ответ , вы можете упроститькод с помощью removeIf(...)
.Однако сначала я бы построил Set
для повышения производительности:
List<String> a = Arrays.asList("werdsegs", "wsghnmrst", "vaasdfdas", "iujhgfds");
List<String> b = new ArrayList<>(Arrays.asList("aalaksdjf", "erftghjuk", "werdsejfksd", "asdklgjaklgj", "poijgndf"));
Set<String> set = a.stream().map(s -> s.substring(0,5)).collect(Collectors.toSet());
b.removeIf(s -> set.contains(s.substring(0,5)));
System.out.println(b); // prints: [aalaksdjf, erftghjuk, asdklgjaklgj, poijgndf]
Если вы хотите новый список, вместо изменения b
, вы можете использовать filter(...)
метод Stream
:
List<String> a = Arrays.asList("werdsegs", "wsghnmrst", "vaasdfdas", "iujhgfds");
List<String> b = Arrays.asList("aalaksdjf", "erftghjuk", "werdsejfksd", "asdklgjaklgj", "poijgndf");
Set<String> set = a.stream().map(s -> s.substring(0,5)).collect(Collectors.toSet());
List<String> c = b.stream().filter(s -> ! set.contains(s.substring(0,5))).collect(Collectors.toList());
System.out.println(c); // prints: [aalaksdjf, erftghjuk, asdklgjaklgj, poijgndf]