Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算对象的和';列表列表中的s属性(带流)_Java_List_Java 8 - Fatal编程技术网

Java 计算对象的和';列表列表中的s属性(带流)

Java 计算对象的和';列表列表中的s属性(带流),java,list,java-8,Java,List,Java 8,我正在使用Java8,我想使用List.stream()functionalities解决我的问题 我的问题是: 这是Score类(Player类不重要): 公开课分数{ 私人玩家; 个人智力得分; 公共播放器getPlayer(){ 返回球员; } 公共无效设置播放器(播放器){ this.player=player; } 公共整数getScore(){ 返回分数; } 公共核心(整数分数){ 这个分数=分数; } } 在我的程序开始时,我有一个玩家列表: List<Player>

我正在使用Java8,我想使用
List.stream()
functionalities解决我的问题

我的问题是:

这是
Score
类(
Player
类不重要):

公开课分数{
私人玩家;
个人智力得分;
公共播放器getPlayer(){
返回球员;
}
公共无效设置播放器(播放器){
this.player=player;
}
公共整数getScore(){
返回分数;
}
公共核心(整数分数){
这个分数=分数;
}
}
在我的程序开始时,我有一个玩家列表:

List<Player> players; // Populated elsewhere
其中,
averagedScore
是一个
玩家的
score.getScore()
值除以该玩家在我的
分数
变量中出现的分数的总数


现在,我所做的是:

for (Players player : players) {
    scores.stream().filter(x -> x.stream().anyMatch(y -> y.getPlayer().equals(player)));
}

但是我不知道如何计算包含在子列表中并由
元素.getScore()
过滤的
元素.getPlayer()

的总和。在“FlatMapping”列表后,您可以使用
groupingBy
Averaging
收集器的组合:

Map<Player, Double> scoreByPlayer = scores.stream()
                .flatMap(List::stream)
                .collect(groupingBy(Score::getPlayer, averagingInt(Score::getScore)));

scoreByPlayer.forEach((p, s) -> System.out.println(p + " : " + s));


完整示例供参考:

public static void main(String[] args) {
  Player adam = new Player("Adam");
  Player pat = new Player("Pat");
  Player susie = new Player("Susie");
  List<List<Score>> scores = new ArrayList<> ();
  scores.add(Arrays.asList(s(adam, 1), s(pat, 2), s(susie, 3)));
  scores.add(Arrays.asList(s(adam, 2), s(pat, 4), s(susie, 6)));
  scores.add(Arrays.asList(s(adam, 3), s(pat, 6), s(susie, 9)));

  Map<Player, Double> scoreByPlayer = scores.stream()
                  .flatMap(List::stream)
                  .collect(groupingBy(Score::getPlayer, averagingInt(Score::getScore)));

  scoreByPlayer.forEach((p, s) -> System.out.println(p + " : " + s));
}

private static Score s(Player p, int score) { return new Score(p, score); }

public static class Score {
  private final Player player;
  private final int score;
  public Score(Player player, int score) {
    this.player = player;
    this.score = score;
  }

  public Player getPlayer() { return player; }
  public int getScore() { return score; }
}

public static class Player {
  private final String name;
  public Player(String name) { this.name = name; }
  @Override public String toString() { return name; }
}
publicstaticvoidmain(字符串[]args){
玩家亚当=新玩家(“亚当”);
玩家pat=新玩家(“pat”);
玩家苏西=新玩家(“苏西”);
列表分数=新的ArrayList();
添加(数组.asList(s(adam,1),s(pat,2),s(susie,3));
得分。添加(数组。asList(s(adam,2),s(pat,4),s(susie,6));
得分。添加(数组。asList(s(adam,3),s(pat,6),s(susie,9));
Map scoreByPlayer=scores.stream()
.flatMap(列表::流)
.collect(groupingBy(Score::getPlayer,averagingInt(Score::getScore));
scoreByPlayer.forEach((p,s)->System.out.println(p+“:”+s));
}
私有静态分数s(玩家p,int分数){返回新分数(p,分数);}
公共静态课堂分数{
私人决赛选手;
个人最终积分;
公开分数(玩家、整数分数){
this.player=player;
这个分数=分数;
}
公共播放器getPlayer(){return Player;}
public int getScore(){return score;}
}
公共静态类播放器{
私有最终字符串名;
公共播放器(字符串名称){this.name=name;}
@重写公共字符串toString(){return name;}
}
Map<Player, Double> scoreByPlayer = scores.stream()
                .flatMap(List::stream)
                .collect(groupingBy(Score::getPlayer, averagingInt(Score::getScore)));

scoreByPlayer.forEach((p, s) -> System.out.println(p + " : " + s));
import static java.util.stream.Collectors.averagingInt;
import static java.util.stream.Collectors.groupingBy;
public static void main(String[] args) {
  Player adam = new Player("Adam");
  Player pat = new Player("Pat");
  Player susie = new Player("Susie");
  List<List<Score>> scores = new ArrayList<> ();
  scores.add(Arrays.asList(s(adam, 1), s(pat, 2), s(susie, 3)));
  scores.add(Arrays.asList(s(adam, 2), s(pat, 4), s(susie, 6)));
  scores.add(Arrays.asList(s(adam, 3), s(pat, 6), s(susie, 9)));

  Map<Player, Double> scoreByPlayer = scores.stream()
                  .flatMap(List::stream)
                  .collect(groupingBy(Score::getPlayer, averagingInt(Score::getScore)));

  scoreByPlayer.forEach((p, s) -> System.out.println(p + " : " + s));
}

private static Score s(Player p, int score) { return new Score(p, score); }

public static class Score {
  private final Player player;
  private final int score;
  public Score(Player player, int score) {
    this.player = player;
    this.score = score;
  }

  public Player getPlayer() { return player; }
  public int getScore() { return score; }
}

public static class Player {
  private final String name;
  public Player(String name) { this.name = name; }
  @Override public String toString() { return name; }
}