java判断字符中某一个字段出现的次数

/**
 * 判断字符中某一个字段出现的次数
 * @param str 字符串
 * @param key 字符
 * @return 次数
 */
public static int getCount(String str,String key){
    if(str == null || key == null || "".equals(str.trim()) || "".equals(key.trim())){
        return 0;
    }
    int count = 0;
    int index = 0;
    while((index=str.indexOf(key,index))!=-1){
        index = index+key.length();
        count++;
    }
    return count;
}
Java 中校验列表中某几个字段是否存在重复数据有多种方法,以下是一些常见的实现方式: ### 重写 `equals` 和 `hashCode` 方法 可以通过重写对象的 `equals` 和 `hashCode` 方法,然后使用 `Stream` 的 `distinct` 方法进行去重,比较原列表和去重后列表的长度来判断是否有重复数据。以 `Employee` 类的 `name` 和 `age` 两个字段为例: ```java import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; class Employee { private String name; private int age; public Employee(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Employee employee = (Employee) o; return age == employee.age && Objects.equals(name, employee.name); } @Override public int hashCode() { return Objects.hash(name, age); } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static boolean hasDuplicates(List<Employee> list) { List<Employee> distinctList = list.stream().distinct().collect(Collectors.toList()); return list.size() != distinctList.size(); } public static void main(String[] args) { List<Employee> employees = new ArrayList<>(Arrays.asList( new Employee("Alice", 25), new Employee("Bob", 30), new Employee("Alice", 25) )); boolean result = hasDuplicates(employees); System.out.println("是否存在重复数据: " + result); } } ``` 这种方法通过重写 `equals` 和 `hashCode` 方法,让 Java 能够根据 `name` 和 `age` 字段判断两个 `Employee` 对象是否相等,然后使用流的 `distinct` 方法去重,最后比较原列表和去重后列表的长度。如果长度不同,则说明列表中存在重复数据 [^1]。 ### 使用 `Map` 来记录字段组合的出现次数 可以将需要检查重复的字段组合成一个唯一的键,然后使用 `Map` 来记录每个键的出现次数,若有出现次数大于 1 的键,则存在重复数据。 ```java import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; class Employee { private String name; private int age; public Employee(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static boolean hasDuplicates(List<Employee> list) { Map<String, Integer> fieldCountMap = new HashMap<>(); for (Employee employee : list) { String key = employee.getName() + "-" + employee.getAge(); fieldCountMap.put(key, fieldCountMap.getOrDefault(key, 0) + 1); } for (int count : fieldCountMap.values()) { if (count > 1) { return true; } } return false; } public static void main(String[] args) { List<Employee> employees = new ArrayList<>(Arrays.asList( new Employee("Alice", 25), new Employee("Bob", 30), new Employee("Alice", 25) )); boolean result = hasDuplicates(employees); System.out.println("是否存在重复数据: " + result); } } ``` 这段代码将 `name` 和 `age` 组合成一个字符串作为键,使用 `Map` 记录每个键的出现次数,最后遍历 `Map` 的值,如果有大于 1 的值则说明存在重复数据。 ### 使用 `Stream` 和 `Collectors.groupingBy` 方法 可以使用 `Stream` 和 `Collectors.groupingBy` 方法将列表按照指定字段组合进行分组,然后检查分组后的结果中是否有元素数量大于 1 的组。 ```java import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Employee { private String name; private int age; public Employee(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static boolean hasDuplicates(List<Employee> list) { Map<String, List<Employee>> groupedEmployees = list.stream() .collect(Collectors.groupingBy(e -> e.getName() + "-" + e.getAge())); return groupedEmployees.values().stream().anyMatch(group -> group.size() > 1); } public static void main(String[] args) { List<Employee> employees = new ArrayList<>(Arrays.asList( new Employee("Alice", 25), new Employee("Bob", 30), new Employee("Alice", 25) )); boolean result = hasDuplicates(employees); System.out.println("是否存在重复数据: " + result); } } ``` 此方法使用 `Collectors.groupingBy` 按照 `name` 和 `age` 组合的字符串对 `Employee` 对象进行分组,然后使用 `anyMatch` 方法检查是否有分组的元素数量大于 1,若有则存在重复数据。 ### 相关问题 1. Java 中使用 `Map` 去重时,如何处理字段组合的空值情况? 2. 如果列表中的元素是自定义类,且需要根据多个复杂对象字段去重,该如何实现? 3. 除了 `Stream` 方法,还有哪些高效的 Java 去重方案? 4. 在高并发场景下,如何安全地对列表中的多个字段进行去重校验?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值