Java 过滤具有公共特征的对象

Java 过滤具有公共特征的对象,java,arrays,java-stream,Java,Arrays,Java Stream,我需要找到我的集合是否包含至少5个具有公共属性值的元素,并返回这些元素 我这样做: cards.stream() .filter(卡片->卡片.stream() .filter(card1->card.getSuit()==card1.getSuit()).count()>=CombinationConstant.card\u count) .collect(Collectors.toList()); 您认为将另一个流放入过滤器是一种不好的做法吗?我不知道它是否比您的实现更有效。但这是其中一种

我需要找到我的集合是否包含至少5个具有公共属性值的元素,并返回这些元素

我这样做:

cards.stream()
.filter(卡片->卡片.stream()
.filter(card1->card.getSuit()==card1.getSuit()).count()>=CombinationConstant.card\u count)
.collect(Collectors.toList());

您认为将另一个流放入过滤器是一种不好的做法吗?

我不知道它是否比您的实现更有效。但这是其中一种方式:

List<String> cards = List.of("a","b","aa","bb","cc");
int CARD_COUNT = 3;
    
Map<Integer, Long> counted = cards.stream()
    .collect(Collectors.groupingBy((String i)-> i.length() , Collectors.counting()));
System.out.println("all counted: " + counted);
        
Map<Integer, Long> result = counted.entrySet().stream()
    .filter(k -> counted.get(k.getKey()) >= CARD_COUNT)
    .collect(Collectors.toMap(x -> x.getKey(), x1 -> x1.getValue()));;
System.out.println("filtered " + result);

我不知道它是否比你的实现更有效。但这是其中一种方式:

List<String> cards = List.of("a","b","aa","bb","cc");
int CARD_COUNT = 3;
    
Map<Integer, Long> counted = cards.stream()
    .collect(Collectors.groupingBy((String i)-> i.length() , Collectors.counting()));
System.out.println("all counted: " + counted);
        
Map<Integer, Long> result = counted.entrySet().stream()
    .filter(k -> counted.get(k.getKey()) >= CARD_COUNT)
    .collect(Collectors.toMap(x -> x.getKey(), x1 -> x1.getValue()));;
System.out.println("filtered " + result);
你还没有发布一个,所以我已经创建了一个,我希望是相关的。我知道你正在尝试使用

import java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入java.util.Random;
导入java.util.stream.collector;
公共类游戏卡{
公开枚举诉讼{
梅花、钻石、红桃、黑桃
}
私人诉讼;
私有int值;
公共游戏卡(套装,智力值){
这套衣服;
这个值=值;
}
公诉状{
反诉;
}
公共静态void main(字符串[]args){
列表卡=新的ArrayList();
Random randomSuit=新的Random();
Suit=null;
对于(int i=0;i<5;i++){
开关(randomSuit.nextInt(4)){
案例0:
suit=suit.CLUBS;
打破
案例1:
西服=西服.钻石;
打破
案例2:
西服=西服;
打破
案例3:
西服=西服.黑桃;
打破
案例4:
打破
违约:
suit=null;
}
if(suit!=null){
增加(新游戏卡(套装,0));
}
}
Map Map=cards.stream()
.collect(Collectors.groupingBy(card->card.getSuit());
map.values()
.stream()
.filter(list->list.size()==5)
.findAny()
.ifPresentOrElse(list->System.out.println(“找到一个”),
()->System.out.println(“未找到”);
}
}
一些可能有用的资源。
Oracle Java教程中的课程。

您还没有发布一篇文章,所以我创建了一篇文章,希望与您的文章相关。我知道你正在尝试使用

import java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入java.util.Random;
导入java.util.stream.collector;
公共类游戏卡{
公开枚举诉讼{
梅花、钻石、红桃、黑桃
}
私人诉讼;
私有int值;
公共游戏卡(套装,智力值){
这套衣服;
这个值=值;
}
公诉状{
反诉;
}
公共静态void main(字符串[]args){
列表卡=新的ArrayList();
Random randomSuit=新的Random();
Suit=null;
对于(int i=0;i<5;i++){
开关(randomSuit.nextInt(4)){
案例0:
suit=suit.CLUBS;
打破
案例1:
西服=西服.钻石;
打破
案例2:
西服=西服;
打破
案例3:
西服=西服.黑桃;
打破
案例4:
打破
违约:
suit=null;
}
if(suit!=null){
增加(新游戏卡(套装,0));
}
}
Map Map=cards.stream()
.collect(Collectors.groupingBy(card->card.getSuit());
map.values()
.stream()
.filter(list->list.size()==5)
.findAny()
.ifPresentOrElse(list->System.out.println(“找到一个”),
()->System.out.println(“未找到”);
}
}
一些可能有用的资源。
Oracle Java教程中的课程。


我假设变量
卡的类型是扩展的某个类或接口。
集合中每个元素的类型是什么?
?每个元素都是卡片类型,具有私人西装字段。Suit是Enum。什么是公共变量?您是否在
卡中寻找至少五个具有相同
套装的元素?是的,我需要至少五个具有相同套装的元素。我假设变量
卡的类型是扩展的某个类或接口。
集合中每个元素的类型是什么?
?每个元素都是卡片类型,具有私人西装字段。Suit是Enum。什么是公共变量?您是否正在寻找具有相同套装的
卡中至少五个元素?是的,我需要至少五个元素具有相同套装。