找出两个List<Integer>中相同的元素
时间: 2024-03-21 13:43:16 浏览: 61
可以使用双重循环来实现:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> result = new ArrayList<>();
for (Integer i : list1) {
for (Integer j : list2) {
if (i.equals(j)) {
result.add(i);
break;
}
}
}
System.out.println(result); // 输出 [3, 4, 5]
```
也可以使用 Java 8 中的 Stream API:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> result = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
System.out.println(result); // 输出 [3, 4, 5]
```
相关问题
找出List<Long>中重复元素
要找出List<Long>中重复元素,可以通过两种方法实现:
方法1:使用Java 8的Stream API
可以使用Java 8的Stream API来实现,具体代码如下:
```java
List<Long> list = new ArrayList<>();
list.add(1L);
list.add(2L);
list.add(3L);
list.add(2L);
list.add(4L);
List<Long> result = list.stream()
.filter(i -> Collections.frequency(list, i) > 1)
.distinct()
.collect(Collectors.toList());
System.out.println(result);
```
这个代码使用了Stream API中的filter()方法来过滤出重复元素,然后再使用distinct()方法来去重,最后将结果保存到List中并输出。
方法2:使用HashMap
还可以使用HashMap来实现,具体代码如下:
```java
List<Long> list = new ArrayList<>();
list.add(1L);
list.add(2L);
list.add(3L);
list.add(2L);
list.add(4L);
Map<Long, Integer> map = new HashMap<>();
for (Long i : list) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
List<Long> result = new ArrayList<>();
for (Map.Entry<Long, Integer> entry : map.entrySet()) {
if (entry.getValue() > 1) {
result.add(entry.getKey());
}
}
System.out.println(result);
```
这个代码使用了HashMap来统计每个元素出现的次数,然后再遍历HashMap来找出重复元素并保存到List中并输出。
在Android中写一段java代码使用dhash算法找出List<File> fileList这个fileList中所有具有相似图片的图片文件,并将它们保存在Map<String, List<String>>中
以下是使用dhash算法在Android中找出具有相似图片的文件的Java代码,将它们保存在Map<String, List<String>>中:
```java
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DHashAlgorithm {
// DHash算法的阈值
private static final int THRESHOLD = 5;
// 获取图片的dhash值
private static String getDHash(File file) {
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
bitmap = Bitmap.createScaledBitmap(bitmap, 9, 8, true);
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pixels.length; i++) {
sb.append((pixels[i] & 0xff) > (pixels[i + 1] & 0xff) ? "1" : "0");
}
String dHash = "";
for (int i = 0; i < sb.length(); i += 4) {
int decimal = Integer.parseInt(sb.substring(i, i + 4), 2);
dHash += Integer.toHexString(decimal);
}
return dHash;
}
// 计算dhash值之间的汉明距离
private static int getHammingDistance(String dHash1, String dHash2) {
int hammingDistance = 0;
for (int i = 0; i < dHash1.length(); i++) {
if (dHash1.charAt(i) != dHash2.charAt(i)) {
hammingDistance++;
}
}
return hammingDistance;
}
// 找出具有相似图片的文件,并将它们保存在Map<String, List<String>>中
public static Map<String, List<String>> findSimilarImages(List<File> fileList) {
Map<String, List<String>> imageMap = new HashMap<>();
for (int i = 0; i < fileList.size(); i++) {
File file1 = fileList.get(i);
String dHash1 = getDHash(file1);
List<String> similarImages = new ArrayList<>();
for (int j = i + 1; j < fileList.size(); j++) {
File file2 = fileList.get(j);
String dHash2 = getDHash(file2);
int hammingDistance = getHammingDistance(dHash1, dHash2);
if (hammingDistance <= THRESHOLD) {
similarImages.add(file2.getAbsolutePath());
}
}
if (similarImages.size() > 0) {
imageMap.put(file1.getAbsolutePath(), similarImages);
}
}
return imageMap;
}
}
```
使用方法:
```java
List<File> fileList = new ArrayList<>();
fileList.add(new File("/path/to/image1.jpg"));
fileList.add(new File("/path/to/image2.jpg"));
fileList.add(new File("/path/to/image3.jpg"));
Map<String, List<String>> imageMap = DHashAlgorithm.findSimilarImages(fileList);
```
其中,fileList是包含所有图片文件的列表,imageMap是保存具有相似图片的文件的Map对象。如果两张图片的dhash值之间的汉明距离小于等于THRESHOLD(默认为5),则认为它们是相似的。
阅读全文