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



我有一个事件列表。每个项目都有以下元素:玩家名称、事件时间、事件名称,用空格分隔。玩家的名字可以是名字,也可以是名字和姓氏。示例["Mark 45 G"、"Rob 4 Y"、"Jude Tom 6 R"]。我想根据事件时间的时间顺序对列表进行排序。因此输出为["Rob 4 Y"、"Jude Tom 6 R"、"Mark 45 G"]我创建了一个EventPOJO类,属性为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());

但我不知道如何将字符串连接到这三个字段。由于时间可以在第二个或第三个位置(如果也给出了姓氏(

差不多完成了。您只需要正确地将String事件映射到Event类。解决方案:

class Event {
private String playerName; 
private int time;
private String name;
public Event(String eventString) {
String[] params = eventString.split(" ");
int i = 0;
this.playerName = params[i++];
if (params.length == 4) {
this.playerName += " " + params[i++];
}
this.time = Integer.valueOf(params[i++]);
this.name = params[i];
}
public String getPlayerName() {
return playerName;
}
public int getTime() {
return time;
}
public String getName() {
return name;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Event{");
sb.append("playerName='").append(playerName).append(''');
sb.append(", time=").append(time);
sb.append(", name='").append(name).append(''');
sb.append('}');
return sb.toString();
}
}

并像这样使用:

@Test
public void test() {
List<String> events = Arrays.asList("Mark 45 G", "Rob 4 Y", "Jude Tom 6 R");
List<Event> orderedEvents = events.stream()
.map(eventString -> new Event(eventString))
.sorted(Comparator.comparingInt(Event::getTime))
.collect(Collectors.toList());
System.out.println(orderedEvents);
}

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

String[] str = { "Mark 45 G", "Rob 4 Y", "Jude Tom 6 R"
};
Function<String, String[]> split = a ->
{
String[] p = a.split("\s+");
if (p.length > 3) {
p = new String[] { p[0] + " " + p[1], p[2], p[3]
};
}
return p;
};
for (String s : str) {
String[] parts = split.apply(s);
System.out.println(Arrays.toString(parts));
}

最新更新