【问题标题】:Java find matching chronological order between two users dataJava在两个用户数据之间找到匹配的时间顺序
【发布时间】:2021-11-12 17:15:33
【问题描述】:

我为点击某个 uri 捕获了用户会话,并且需要找出匹配的按时间顺序排列的最大点击次数。例如:

User1 = {"/blue", "/green", "/pink", "/orange", "/white", "/gray"} 

User2 = {"/brown", "/green", "/pink", "/orange", "/red", "/gray"}

User3 = {"/blue", "/green", "/pink"}

User4 = {"/blue"}

我需要一个方法,它需要两个参数,并且应该返回匹配的最大点击次数,例如

场景 1-

public static void findMaxHitClick( String User1, String User2) {

    # output should be {"/green", "/pink", "/orange"}
}

场景 2-

public static void findMaxHitClick( String User3, String User4) {

    # output should be {"/blue"}
}

在java中实现上述的有效方法是什么?

【问题讨论】:

  • {"/blue", "/green", "/pink"}{"/blue"} 的公共输出如何预计为 /red
  • @AlexRudenko,抱歉误会,我更新了问题并找到了时间顺序
  • @AlexRudenko,在我的帖子中我添加了user3user4 应该返回/blue ..

标签: java algorithm collections


【解决方案1】:

首先,findMaxHitClick(不能声明为void)的输入和输出应该是字符串的数组或集合。

接下来,有一个方法Collections::retainAll,它允许找到两个集合的交集。

因此,findMaxHitClick 可以这样实现:

public static Collection<String> findMaxHitClick(String[] arr1, String[] arr2) {
    Set<String> s1 = new LinkedHashSet<>(Arrays.asList(arr1));
    Set<String> s2 = new LinkedHashSet<>(Arrays.asList(arr2));
    
    s1.retainAll(s2);
    
    return s1;
}

测试:

String[] User1 = {"/blue", "/green", "/pink", "/orange", "/white", "/gray"};
String[] User2 = {"/brown", "/green", "/pink", "/orange", "/red", "/gray"};
String[] User3 = {"/blue", "/green", "/pink"};
String[] User4 = {"/blue"};

System.out.println(findMaxHitClick(User1, User2));
System.out.println(findMaxHitClick(User3, User4));

输出:

[/green, /pink, /orange, /gray]  // /gray occurs in both User1 & User2
[/blue]                          // User3 & User4 have common /blue, not /red

【讨论】:

  • 谢谢,但我的问题是找到匹配的时间顺序,所以第一个输出应该是 {"/green", "/pink", "/orange"}
  • 你说的时间顺序是什么意思?如果广告订单很重要,可以改用LinkedHashSet,请检查更新。另外,/gray 是 User1 和 User2 共有的
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多