Java 如何对字符串列表进行流式处理,并根据每个项目中的数字对其进行排序

Java 如何对字符串列表进行流式处理,并根据每个项目中的数字对其进行排序,java,string,list,java-stream,Java,String,List,Java Stream,我有一份活动清单。每个项目都有以下元素:玩家名称、事件时间、事件名称,以空格分隔。玩家的名字可以是名字,也可以是名字和姓氏。 示例[“Mark 45 G”、“Rob 4 Y”、“Jude Tom 6 R”]。我想根据事件时间的时间顺序对列表进行排序。因此,输出将为[“Rob 4 Y”,“Jude Tom 6 R”,“Mark 45 G”] 我已经创建了一个事件POJO类,其属性为stringplayer、int-time、stringevent以及getter和setter。我想要的是这样的东西

我有一份活动清单。每个项目都有以下元素:玩家名称、事件时间、事件名称,以空格分隔。玩家的名字可以是名字,也可以是名字和姓氏。 示例[“Mark 45 G”、“Rob 4 Y”、“Jude Tom 6 R”]。我想根据事件时间的时间顺序对列表进行排序。因此,输出将为[“Rob 4 Y”,“Jude Tom 6 R”,“Mark 45 G”] 我已经创建了一个事件POJO类,其属性为stringplayer、int-time、stringevent以及getter和setter。我想要的是这样的东西

List<String> events=  Arrays.asList( new String[]  {"Mark 45 G", "Rob 4 Y", "Jude Tom 6 R" });
List<Event> orderedEvents = events.stream()
               .map(a -> new Event(a[0], a[1], a[2]))
               .sorted(Comparator.comparing(Event::getTime))
               .collect(Collectors.toList());
List events=Arrays.asList(新字符串[]{“Mark 45 G”、“Rob 4 Y”、“Jude Tom 6 R”});
List orderedEvents=events.stream()
.map(一个->新事件(一个[0],一个[1],一个[2]))
.sorted(Comparator.comparing(事件::getTime))
.collect(Collectors.toList());

但我不知道如何将字符串添加到这三个字段。由于时间可以排在第二位或第三位(如果还提供了姓氏)

差不多完成了。只需将
字符串
事件正确映射到
事件
类即可。 解决方案:

类事件{
私人弦乐演奏者姓名;
私人整数时间;
私有字符串名称;
公共事件(字符串eventString){
String[]params=eventString.split(“”);
int i=0;
this.playerName=params[i++];
如果(参数长度==4){
this.playerName+=“”+参数[i++];
}
this.time=Integer.valueOf(params[i++]);
this.name=params[i];
}
公共字符串getPlayerName(){
返回playerName;
}
公共int getTime(){
返回时间;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“事件{”);
sb.append(“playerName=”).append(playerName).append(“\”);
某人追加(“,time=”)。追加(time);
sb.append(“,name=”)。append(name)。append(“\”);
某人附加('}');
使某人返回字符串();
}
}
然后像这样使用它:

@测试
公开无效测试(){
List events=Arrays.asList(“mark45g”、“rob4y”、“judetom6r”);
List orderedEvents=events.stream()
.map(事件字符串->新事件(事件字符串))
.sorted(Comparator.comparingInt(事件::getTime))
.collect(Collectors.toList());
System.out.println(orderedEvents);
}

自定义如何拆分字符串的一种方法

String[]str={“Mark 45 G”、“Rob 4 Y”、“Jude Tom 6 R”
};
功能拆分=a->
{
字符串[]p=a.split(\\s+);
如果(p.长度>3){
p=新字符串[]{p[0]+“”+p[1],p[2],p[3]
};
}
返回p;
};
for(字符串s:str){
字符串[]部分=拆分。应用;
System.out.println(Arrays.toString(parts));
}

按空格分割,如果结果包含3个元素,您有一个名字,如果结果包含4个元素,您有名字和姓氏。认真地说,为
字符串创建一个POJO,然后流式传输该值…您如何将
Jude Tom 6 R
解释为3个字符串,并说明原因?