小编Jon*_*lin的帖子

java 8,从列表中返回重复项的最有效方法(不删除它们)?

我有一个ArrayList字符串,我想查找并返回在列表中多次存在的所有值。大多数情况都在寻找相反的情况(删除重复项,如 distinct()),因此很难获得示例代码。

我能够想出这个:

public synchronized List<String> listMatching(List<String> allStrings) {

    long startTime = System.currentTimeMillis();

    List<String> duplicates = allStrings.stream().filter(string -> Collections.frequency(allStrings, string) > 1)
            .collect(Collectors.toList());

    long stopTime = System.currentTimeMillis();
    long elapsedTime = stopTime - startTime;
    LOG.info("Time for Collections.frequency(): "+ elapsedTime);

    return duplicates;
}
Run Code Online (Sandbox Code Playgroud)

但这使用Collections.frequency, 循环遍历每个项目的整个列表并计算每次出现的次数。在我当前的大约4,000 个字符串列表上运行大约需要150 毫秒。这对我来说有点慢,并且随着列表大小的增加只会变得更糟。我采用了频率方法并将其重写为在第二次出现时立即返回:

protected boolean moreThanOne(Collection<?> c, Object o) {
    boolean found = false;
    if (o != null) {
        for (Object e : c) {
            if (o.equals(e)) { …
Run Code Online (Sandbox Code Playgroud)

java optimization list duplicates java-stream

5
推荐指数
1
解决办法
7604
查看次数

MySQL通过不返回正确的结果来计数

我有一个票务系统,我正在尝试在其上运行报告。我试图让每个用户接触的票数。使用第一个查询:

SELECT * FROM (
SELECT TicketID, UserID, EventDateTime
FROM dcscontact.ticketevents
WHERE EventDateTime BETWEEN '2016-06-22' AND '2016-06-23'
ORDER BY EventDateTime DESC) x
WHERE UserID=80
GROUP BY TicketID;
Run Code Online (Sandbox Code Playgroud)

我能够列出为特定用户触碰的工单,并且可以手动计算它们:

TicketID    UserID  EventDateTime
99168       80      6/22/2016 13:21
99193       80      6/22/2016 7:42
99213       80      6/22/2016 13:02
99214       80      6/22/2016 6:30
99221       80      6/22/2016 6:57
99224       80      6/22/2016 7:48
99226       80      6/22/2016 6:27
99228       80      6/22/2016 8:49
99229       80      6/22/2016 8:53
99232       80      6/22/2016 9:18
99237       80      6/22/2016 13:08
Run Code Online (Sandbox Code Playgroud)

但是当我尝试删除 WHERE UserID= 语句并尝试将其用作子查询时,如下所示:

SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql sql group-by count mariadb

1
推荐指数
1
解决办法
951
查看次数

标签 统计

count ×1

duplicates ×1

group-by ×1

java ×1

java-stream ×1

list ×1

mariadb ×1

mysql ×1

optimization ×1

sql ×1