package com.ddd;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
- @author
- @date 2021/6/5 14:17
- @description
*/
public class StreamTest {
@Test
public void tesListData() {
//被迭代的集合
List<String> labours = new ArrayList<>();
labours.add("总过南通工厂");
labours.add("-qqqq南通工厂");
labours.add("BBBB南通工厂");
labours.add("kua昆山工厂");
labours.add("昆山工厂AAAAAA");
labours.add("大白菜工厂AAAAAA");
// 需被过滤掉的字符串
List<String> fil = new ArrayList<>();
fil.add("昆山工厂");
fil.add("南通工厂");
//==== 方法零 Harry ====
labours = labours.stream().filter(lar -> {
boolean notExitFlag = true;
for (String s : fil) {
if (lar.contains(s)) {
notExitFlag = false;
break;
}
}
return notExitFlag;
}).collect(Collectors.toList());
//==== 方法一 ====
labours = labours.stream()
.filter(a -> fil.stream().noneMatch(b -> a.contains(b)))
.collect(Collectors.toList());
//=== 方法二 ====
for (String s : fil) {
// iterator()要放在for循环里,确保下次进入循环能够拿到labours剩余的值
Iterator<String> iterator = labours.iterator();
while (iterator.hasNext()){
String next = iterator.next();
boolean nt = next.contains(s);
if (nt){
iterator.remove();
}
}
}
// ==== 方法三 ====
for (String s : fil) {
Pattern ptn = Pattern.compile(s);
Iterator<String> iterator = labours.iterator();
while (iterator.hasNext()){
Matcher matcher = ptn.matcher(iterator.next());
if (matcher.find()) {
iterator.remove();
}
}
}
//=== 方法四(很局限)===
labours = labours.stream()
.filter(fac -> !fac.contains("昆山工厂") && !fac.contains("南通工厂"))
.collect(Collectors.toList());
//===输出 ===
System.out.println(labours);
}
}