//ArrayList<String>中有如下数据:”a”, ”b”, ”c”, ”a”, ”b”,”a”. // 定义名为:int frequency (ArrayList arr, String key)的方法.arr是ArrayList集合,key是要查找的某个元素. // 使用增强for循环方式查找key //在 ArrayList 中出现的次数.并将次数作为方法的返回值.在 main 方法中调用 frequency 方法
时间: 2024-04-17 21:23:31 浏览: 13
public class TestFrequency {
public static int frequency(ArrayList<String> arr, String key) {
int count = 0;
for (String str : arr) {
if (str.equals(key)) {
count++;
}
}
return count;
}
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
arr.add("b");
arr.add("c");
arr.add("a");
arr.add("b");
arr.add("a");
String key = "a";
int result = frequency(arr, key);
System.out.println("元素 " + key + " 在ArrayList中出现的次数为:" + result);
}
}
相关问题
查出originalList重复元素并生成新的list List<String> originalList = new ArrayList<String>(); originalList.add("A"); originalList.add("B"); originalList.add("C"); originalList.add("B"); originalList.add("D");
可以使用Java 8的Stream API来查找列表中的重复元素并生成新的列表。具体步骤如下:
1.使用Stream API的filter()方法过滤出原始列表中出现两次或以上的元素
2.使用Stream API的distinct()方法去重,避免将重复元素添加到新的列表中多次
3.使用Stream API的collect()方法将过滤后的元素收集到新的列表中
以下是示例代码:
```java
List<String> originalList = new ArrayList<String>();
originalList.add("A");
originalList.add("B");
originalList.add("C");
originalList.add("B");
originalList.add("D");
List<String> duplicateList = originalList.stream()
.filter(element -> originalList.indexOf(element) != originalList.lastIndexOf(element))
.distinct()
.collect(Collectors.toList());
// 输出重复的数据
System.out.println("重复的数据: " + duplicateList);
```
这段代码会输出:重复的数据: [B],因为原始列表中有两个 "B"。
将List<B>与List<A>进行match,当List<B>中存在List<A>中没有的数据时,向List<A>中根据条件追加。用java8写一个共通方法
假设A和B类的定义如下:
```java
public class A {
private int id;
private String name;
// getter/setter 省略
}
public class B {
private int id;
private String name;
private String description;
// getter/setter 省略
}
```
共通方法的实现如下:
```java
public static <T extends A, U extends B> void matchAndAppend(List<T> listA, List<U> listB, BiPredicate<T, U> predicate, Function<U, T> mapper) {
Set<Integer> idSetA = listA.stream().map(A::getId).collect(Collectors.toSet());
listB.stream()
.filter(b -> !idSetA.contains(b.getId()))
.map(mapper)
.filter(a -> listB.stream().anyMatch(b -> predicate.test(a, b)))
.forEach(listA::add);
}
```
方法的参数说明:
- `listA`:待追加数据的列表;
- `listB`:原始数据的列表;
- `predicate`:用于匹配A和B对象是否匹配的谓词;
- `mapper`:将B对象转换为A对象的映射函数。
方法的实现步骤如下:
- 首先,将A列表中所有元素的id提取出来,放入一个Set中,以便后面判断B对象是否存在于A列表;
- 然后,过滤出B列表中不存在于A列表中的元素,并将其转换为A对象;
- 接着,对转换后的A对象进行过滤,只留下符合条件的对象,即存在于B列表中;
- 最后,将符合条件的A对象添加到A列表中。
示例代码如下:
```java
List<A> listA = new ArrayList<>();
List<B> listB = new ArrayList<>();
listB.add(new B(1, "A", "B"));
listB.add(new B(2, "B", "C"));
listB.add(new B(3, "C", "D"));
matchAndAppend(listA, listB, (a, b) -> Objects.equals(a.getName(), b.getName()), b -> new A(b.getId(), b.getName()));
System.out.println(listA); // 输出:[A{id=1, name='A'}, A{id=2, name='B'}, A{id=3, name='C'}]
```
在上面的示例代码中,我们将B转换为A时,只保留了id和name两个属性,其它属性被丢弃了。如果需要保留其它属性,可以在A类中添加对应的属性,并在mapper函数中进行转换。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)