当前位置: 首页 > 知识库问答 >
问题:

在两个列表中查找所有公共元素

赵永新
2023-03-14

我试图在我的ArrayList“list1”中找到公共元素

List<LocalDate> list1 = new ArrayList<> ();
for (LocalDate d = dateFrom; !d.isAfter(dateTo); d = d.plusDays(1)) {
      dates.add(d);

它包含“dateFrom”和“dateTo”之间的所有日期以及我的列表“list2”

List<LocalDate> list2 = Arrays.asList(dateTime);

其中dateTime是一个变量,它仅存储具有以下结构的文本文件中的日期:

1946-01-12;07:00:00;-1.3;G
1946-01-12;13:00:00;0.3;G
1946-01-12;18:00:00;-2.8;G
1946-01-13;07:00:00;-6.2;G
1946-01-13;13:00:00;-4.7;G
1946-01-13;18:00:00;-4.3;G

我尝试使用list2.retainall(list1);来查找清单2中也在清单1中的所有日期,但我认为我的问题是清单2不是一个ArrayList。我该怎么解决呢?

private static List<WeatherDataHandler> weatherData = new ArrayList<>();
public void loadData(String filePath) throws IOException {
//Read all data
    List<String> fileData = Files.readAllLines(Paths.get("filePath"));

    Map<String, Long> frequencyMap = new LinkedHashMap<>();

    LocalDate dateFrom = LocalDate.of(1946,01,12);
    LocalDate dateTo = LocalDate.of(1946, 01, 14);

    List<LocalDate> list1 = new ArrayList<> ();
    for (LocalDate d = dateFrom; !d.isAfter(dateTo); d = d.plusDays(1)) {
      dates.add(d);

    }

    for(String str : fileData) {
        List<String> parsed = parseData(str);
        LocalDate dateTime = LocalDate.parse(parsed.get(0));
        LocalTime Time = LocalTime.parse(parsed.get(1));
        double temperature = Double.parseDouble(parsed.get(2));
        String tag = parsed.get(3);

        WeatherDataHandler weather = new WeatherDataHandler(dateTime, Time, temperature, tag);
        weatherData.add(weather);

        List<LocalDate> list2 = Arrays.asList(dateTime);

        list2.retainAll(list1); 

        String strDate = list2.toString();
        frequencyMap.compute(strDate,
                (date, count) -> count == null ? 1 : count + 1);
    }

    for (Map.Entry<String, Long> entry : frequencyMap
            .entrySet()) {
        if (entry.getValue() < 24){
        System.out.println(
                entry.getKey() + ": " + (24-entry.getValue()));
    }}

共有1个答案

仇炜
2023-03-14

您可以按照以下方法进行操作:

List<LocalDate> commonList = new ArrayList<LocalDate>();
for (LocalDate date : list1) {
    if(list2.contains(date)) {
        commonList.add(date);
    }
}
System.out.println("Common elements: " + commonList)

[更新]

替换

if (entry.getValue() < 24)

if (entry.getValue() < 24 && !entry.getKey().equals("[]"))

在代码中删除类似[]:23的内容。

 类似资料:
  • 问题内容: 如何以简洁明了的方式找出两个列表中的第一个公共元素(在本例中为“ 2”)?任何列表都可以为空,也可以没有公共元素-在这种情况下,没有一个很好。 我需要它来向新手展示python,所以越简单越好。 UPD:顺序对于我的目的并不重要,但让我们假设我正在寻找x中的第一个元素,该元素也出现在y中。 问题答案: 这应该很简单 几乎和它一样有效 (要获得更有效的解决方案,请检查Ashwini Ch

  • 代码不止一次返回0和公共数字。我想让它返回一个数组与公共数字一次!那么,如何返回一个数组,数组中的数字对两个数组都是通用的。我想返回{2,7,4}-类似这样的东西。当我试图返回数组时,我总是出现越界异常。谢谢,巴里

  • 本文向大家介绍在C ++中的两个双链表中查找公共节点数,包括了在C ++中的两个双链表中查找公共节点数的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个双向链表。我们必须在两个双向链表中都找到公共节点的总数。因此,如果两个列表像[15、16、10、9、7、17]和[15、16、40、6、9],则有三个公共节点。 使用两个嵌套循环遍历两个列表,直到列表的末尾,对于列表中的每个节点,检查它是否与

  • 假设我有两个这种格式的数据帧(称它们为和): 我希望获得所有行的数据帧,这些行在和中有一个公共的。(即,如果同时位于和中,则在输出数据帧中包括这两行) 我能想到很多方法来解决这个问题,但它们都让我觉得笨拙。例如,我们可以在每个数据帧中找到所有唯一的s,创建每个数据帧的集合,找到它们的交集,用结果集过滤两个数据帧,并连接两个过滤后的数据帧。 也许这是最好的方法,但我知道熊猫很聪明。有没有更简单的方法

  • 问题内容: 我有两个三个整数的对象。我想找到一种方法来返回两个列表的共同元素。有谁知道我如何实现这一目标? 问题答案: 使用。 如果要避免更改受到影响listA,则需要创建一个新的更改。

  • 我遇到了一个问题语句,要在给定的两个子字符串之间找到所有公共子字符串这样一种方式,在每种情况下都必须打印最长的子字符串。问题声明如下: 编写一个程序来查找两个给定字符串之间的公共子字符串。但不包括包含在较长公共子字符串中的子字符串。 null 在这种情况下,您不必使用字符串实用程序方法,如:contains、indexOf、StringTokenizer、split和replace。 我的算法是这