Bootstrap

java集合模糊匹配

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);
}

}

;