如何.count()list.stream()的子对象?

时间:2019-01-17 13:03:45

标签: java collections java-8 mapping java-stream

public static int amountKurse (List<Studie> lstd) {
    int result = (int) lstd.stream().map(Studie::getKurse).count();
    return result;
}

private Map<Kurs,Integer> kurse = new HashMap<>();

public Set<Kurs> getKurse(){
    return kurse.keySet();
}

我想计算所有Kurse对象中Studie的数量。 我目前的结果是20,应该是132 我猜我的函数只计算Studie的数量 非常感谢您对此提供的帮助。

2 个答案:

答案 0 :(得分:4)

如果getKurse()返回一个Set,并且您想计算所有这些Set的元素总数,请使用:

int result = (int) lstd.stream().flatMap(s -> s.getKurse().stream()).count();

或者,如果您想避免计算重复次数:

int result = (int) lstd.stream().flatMap(s -> s.getKurse().stream()).distinct().count();

答案 1 :(得分:2)

使用flatMap来将Studie的流Kurse转换为.count()的流。然后只需int count = (int) lstd.stream() // Stream<Studie> .map(Studie::getKurse) // Stream<Set<Kurse>> .flatMap(Set::stream) // Stream<Kurse> .count(); 流中的项目:

class Program
{
    public static void Main(string[] args)
    {
        List<string> dates = new List<string>();

        string pattern = @"\b\d{2}.\d{2}.\d{4}\b";

        Regex rgx = new Regex(pattern);

        var sentence = "Lorem aaaa 12.01.2019 ffffffffdddddd hhhhhh 14.01.2019 nnnnnn ggg 15.01.2019 cxcccc ....";

        var matches = rgx.Matches(sentence);

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }

        Console.ReadLine();
    }
}