相关疑难解决方法(0)

Java 8属性不同

在Java 8中,如何Stream通过检查每个对象的属性的清晰度来使用API 过滤集合?

例如,我有一个Person对象列表,我想删除具有相同名称的人,

persons.stream().distinct();
Run Code Online (Sandbox Code Playgroud)

将使用Person对象的默认相等检查,所以我需要像,

persons.stream().distinct(p -> p.getName());
Run Code Online (Sandbox Code Playgroud)

不幸的是,该distinct()方法没有这种过载.如果不修改类中的相等性检查,Person是否可以简洁地执行此操作?

java collections java-8 java-stream

406
推荐指数
20
解决办法
24万
查看次数

过滤列表受限制

描述

输入List<Item>按分数排序,Item如下所示:

class Item {
    double score;
    String category; 
    String author;    
    String poi;   
}
Run Code Online (Sandbox Code Playgroud)

现在我需要在这些限制下从数组中选择10个得分最高的元素:

  • 他们应该有所不同 poi
  • 他们应该有所不同 author
  • 最多有3个相同的项目category.并且来自同一子序列的任何子序列的长度category不应超过2.

如果没有满足上述规则的子序列,只需返回前10个元素.

我试过了什么

现在,我直接迭代List,并用三个HashMap<String, Integer>来存储每个的外观cagetory/poi/author.我List<Item> selected用来存储结果.

  • 如果已经有一个具有此元素的选定元素,poi则将丢弃新元素.
  • 如果已经有一个具有此元素的选定元素,author则将丢弃新元素.
  • 如果已经有三个具有此元素的选定元素,category则将丢弃新元素.
  • 如果已经在尾部两个元素selected具有此category,那么新元素将被丢弃.

问题

它在输入很大时有效,但是当输入相对较小时,它不起作用.例如,输入时

  1. 第1项(A类,作者1)
  2. 第2项(A类,作者2)
  3. 第3项(A类,作者3)
  4. 第4项(B类,作者2)
  5. 第5项(C类,作者5)
  6. 第6项(D类,作者6)
  7. 第7项(E类,作者7)
  8. 第8项(F类,作者8)
  9. 第9项(G类,作者9)
  10. Item10(H类,作者10)
  11. 第11项(第I类,作者11)

那我的解决方案就是

  • Item3丢弃,因为它具有相同categoryItem1Item2
  • Item4丢弃,因为它有相同 …

java algorithm

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

如何删除List <T> JAVA 8中的重复项

实际上,我知道减少重复distinct()或分配的List方法Set,但我有一些不同的问题.如何解决JAVA 8中使用流的问题以下的智能方式或可能StreamEx

假设我们在List中有一个对象

A, A, A, B, B, A, A, A, C, C, C, A, A, B, B, A

现在我需要

A, B, A, C, A, B, A

所以复制被删除了,但只有当下一个出现时,但如果旁边是不同的对象则应该保留.我尝试了一些解决方案但是丑陋,而且不易阅读.

java collections java-8

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

在Java 8中根据属性和谓词删除重复项

基于/sf/answers/2077005101/的问题

给定具有ID,姓名和IQ的员工列表:

List<Employee> employee = Arrays.asList(new Employee(1, "John", 80), new Employee(1, "Bob", 120), Employee(1, "Roy", 60), new Employee(2, "Alice", 100));
Run Code Online (Sandbox Code Playgroud)

我想输出:

[Employee{id=1, name='Bob', iq=120}, Employee{id=2, name='Alice', iq=100}]
Run Code Online (Sandbox Code Playgroud)

因此,基于员工的id属性从列表中删除重复项,并出于明显的原因选择智商最高的员工。:)

特别是,我对调整此解决方案感兴趣,该解决方案仅根据id删除重复项:

    import static java.util.Comparator.comparingInt;
    import static java.util.stream.Collectors.collectingAndThen;
    import static java.util.stream.Collectors.toCollection;

    ...
    List<Employee> unique = employee.stream()
                                    .collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingInt(Employee::getId))),
                                                               ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

有办法吗?

java java-8

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

从List java8中删除重复项

我在下面有一个类,想要删除包含相同名称的重复者,如何使用Java8 Lambda,预期List包含p1,p3,如下所示.

人:

public class Person {

public int id;
public String name;
public String city;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

}
Run Code Online (Sandbox Code Playgroud)

测试:

import java.util.ArrayList;
import java.util.List;

public class Testing {

public static void main(String[] args) { …
Run Code Online (Sandbox Code Playgroud)

java-8

4
推荐指数
2
解决办法
2万
查看次数

如何过滤2个包含数百万个具有相同ID的项目的巨大列表

这是我的第二个清单,其中包含超过数百万个项目。两者都有相同 ID 的相同项目。ID 位于字符串中。我只需要ID不同的项目。我就是这样做的。但我确信一定有一个更好且持久的解决方案:-

    List<Transaction> differentList = new ArrayList<>();

    for(Transaction tx : foundTransactions ){
        for(Transaction aTx : ArchivedTransactions) 
        {
            if(!tx.getId().equalsIgnoreCase(aTx.getId()) ){
                differentList .add(tx);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用流,但我做不到。我想使用stream API应该会更好。请建议我任何改进。

java list java-stream

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

根据Java 8中的多个属性从对象列表中删除重复项

我试图从基于两个属性的对象列表中删除重复项,这个问题类似于下面的链接,但是我试图使用Java 8功能基于两个属性找到唯一性。

示例:我有一个自定义对象,其中两个属性一起构成唯一的条目

说列出客户

customerName和DOB一起进行唯一输入。

使用两个属性的谓词来识别区别的任何解决方案。像下面的链接,他们对一个属性有解决方案。 Java 8按属性区分

类似的问题:

根据Java 8中的属性从对象列表中删除重复项

java java-8

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

标签 统计

java ×6

java-8 ×5

collections ×2

java-stream ×2

algorithm ×1

list ×1