Tag: 分组

从csv生成树结构

我已经暂时解决了这个问题一段时间了。 我基本上试图从一组CSV数据生成树层次结构。 CSV数据不一定是有序的。 这类似于以下内容: Header: Record1,Record2,Value1,Value2 Row: A,XX,22,33 Row: A,XX,777,888 Row: A,YY,33,11 Row: B,XX,12,0 Row: A,YY,13,23 Row: B,YY,44,98 我试图尽可能灵活地进行分组。 最简单的分组是为Record1和Record2做的,Value1和Value2存储在Record2下,这样我们得到以下输出: Record1 Record2 Value1 Value2 这将是: A XX 22,33 777,888 YY 33,11 13,23 B XX 12,0 YY 44,98 我目前正将我的群组设置存储在列表中 – 我不知道这是否会妨碍我的想法。 此列表包含组的层次结构,例如: Record1 (SchemaGroup) .column = Record1 .columns = null .childGroups = Record2 (SchemaGroup) .column = […]

Java Streams:获取按内部映射键分组的值

我有Map<A, Map> ,我希望使用Java Streams从中获取Map<B, List> 。 我尝试按如下方式进行: public Map<B, List> groupsByInnerKey(Map<A, Map> input) { return input.values() .stream() .flatMap(it -> it.entrySet().stream()) .collect(Collectors.groupingBy(Map.Entry::getKey)); } 我期待的是: flatMap给出Map.Entry collect(Collectors.groupingBy(…))获取应用于Map.Entry函数并返回B ,因此它将C值收集到List 。 但它没有编译,字面意思: 无法从静态上下文引用非静态方法 在最后一行的Map.Entry::getKey中。 有人可以解释什么是错的或什么是实现我想要的正确方法?

使用Collectors.summingInt时如何获取自定义类型而不是Integer?

我目前正在创建一个Map<String, Map> ,其中Integer表示秒: Map<String, Map> map = stream.collect(Collectors.groupingBy( x -> x.getProject(), Collectors.groupingBy( x -> x.getDate(), Collectors.summingInt(t -> t.getDuration().toSecondOfDay()) ) )); 我怎样才能创建Map<String, Map> ?

在Java 8中限制groupBy

如何通过每个条目限制groupBy? 例如(基于此示例: stream groupBy ): studentClasses.add(new StudentClass(“Kumar”, 101, “Intro to Web”)); studentClasses.add(new StudentClass(“White”, 102, “Advanced Java”)); studentClasses.add(new StudentClass(“Kumar”, 101, “Intro to Cobol”)); studentClasses.add(new StudentClass(“White”, 101, “Intro to Web”)); studentClasses.add(new StudentClass(“White”, 102, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 106, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 103, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 104, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 105, “Advanced Web”)); 此方法返回简单组: Map<String, […]

使用Collection.stream按特定属性进行动态分组

我试图通过使用Java 8 Collection-Stream按多个属性对对象列表进行分组。 这非常有效: public class MyClass { public String title; public String type; public String module; public MyClass(String title, String type, String module) { this.type = type; this.title = title; this.module= module; } } List data = new ArrayList(); data.add(new MyClass(“1″,”A”,”B”)); data.add(new MyClass(“2″,”A”,”B”)); data.add(new MyClass(“3″,”A”,”C”)); data.add(new MyClass(“4″,”B”,”A”)); Object result = data.stream().collect(Collectors.groupingBy((MyClass m) -> m.type, […]

如何使用枚举与分组和子组层次结构/嵌套

我有一个名为Example enum “类”如下: enum Example { //enums belonging to group A: enumA1, enumA2, enumA3, //enums belonging to group B: enumB1, enumB2, enumB3, //enums belonging to group C: enumC1, enumC2, enumC3; } 对我的项目来说,重要的是我使用的所有枚举都属于Example (因为这是类的构造函数中的参数)。 如何使用enum层次结构/嵌套来实现以下目的: 测试enum是否属于组A,B或C的方法。例如,像Example.enumA1.isGroupBelonging(Group.A)或isGroupBelonging(Example.enumA1,Group.A)这样的isGroupBelonging(Example.enumA1,Group.A)方法将返回true 。 能够对A , B和C组的子组做同样的事情。 例如,组A可能具有子组a , b和c 。 然后我想要一个方法,例如Example.enumA1.isSubGroupBelonging(SubGroup.a) ,它是一个public boolean 。 一种方法来完成所有这些,而不需要一些精心设计的enum名称堵塞我的代码。 例如,能够在我的其他类中引用Example.enumA1而不需要使用像Example.enumA1(Group.A,SubGroup.a)或Example.enumA1.Group.A.SubGroup.a这样的引用它会很好。 Example.enumA1.Group.A.SubGroup.a

将Java8流分组而不收集它

在Java 8中是否有任何方法可以将java.util.stream.Stream的元素分组而不收集它们? 我希望结果再次成为Stream 。 因为我必须处理大量数据甚至无限流,所以我无法先收集数据并再次流式传输结果。 需要分组的所有元素在第一个流中是连续的。 因此我喜欢让流评估变得懒惰。

Java:用可点击的HTML链接替换文本URL

我正在尝试将包含某些URL的String替换为与浏览器兼容的链接URL。 我的初始String看起来像这样: “hello, i’m some text with an url like http://www.the-url.com/ and I need to have an hypertext link !” 我想得到的是一个字符串看起来像: “hello, i’m some text with an url like http://www.the-url.com/ and I need to have an hypertext link !” 我可以使用以下代码行捕获URL: String withUrlString = myString.replaceAll(“.*://[^[:space:]]+[[:alnum:]/]”, “HereWasAnURL”); 也许regexp表达式需要一些修正,但它工作正常,需要在更长的时间内进行测试。 所以问题是如何保持regexp捕获的表达式,只需添加创建链接所需的内容:catched string 提前感谢您的关注和回复!

Java 8按一对多分组

我想学习如何使用Java 8语法与流,并有点卡住。 当每个值都有一个键时,分组很容易。 但是如果我为每个值都有一个键列表并且仍然想用groupingBy对它们进行分类呢? 我是否必须将其分解为多个语句,或者可能有一些流魔术可以使其更简单。 这是基本代码: List albums = new ArrayList(); Map<Artist, List> map = albums.stream().collect(Collectors.groupingBy(this::getArtist)); 如果每个专辑只有一个艺术家,那么效果很好。 但我必须返回一个列表,因为专辑可以有很多艺术家。 专辑和艺术家当然用于说明,我有真实世界的类型.. 可能有一个简单的解决方案,但我有一段时间没有找到它所以我呼吁这个网站代表的集体大脑来解决它。 :)如果不存在简单的解决方案,也欢迎使用复杂的解决方案。 在Album类中或作为以Album作为参数的实用程序方法: Artist getArtist(); // ok List getArtist(); // Not ok, since we now have many “keys” for every Album 干杯,Mikael Grev

在Java中按字段名称分组

我正在尝试按其字段对Java对象进行分组,即Person.java public class Person { String name; String surname; …. } 因此,如果我有n个 Person对象,那么最简单的方法是让所有人将“David”命名为Map<String, List> map; ? 我在Google上发现了这个(但它没有编译),它似乎是我正在寻找的东西: http : //www.anzaan.com/2010/06/grouping-objects-using-objects-property/