Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

席替えリポジトリにJavaバージョンのpull requestを送った

ペパボ新卒エンジニア研修では、新卒エンジニアの席を時々入れ替えてリフレッシュしようってんで、席替えスクリプトをいろんな言語で書くのが伝統になってきている。以下のリポジトリで、社内はもちろん、社外からもpull requestを募集しているところだ。

github.com

なんか書いてみるかってんで、Java8で書いてpull requestを送ってみた。Java8感出せるようがんばってみたが、中途半端な感じがするな。

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class sekigae {
    public static void main (String[] args) {
        List<String> names = loadFile("names.txt");
        Collections.shuffle(names);
        eachSlice(names, 3).forEach((List<String> list) -> {
            System.out.println(list.stream().collect(Collectors.joining(" ")));
        });
    }

    private static List<String> loadFile(String path) {
        List<String> list = new ArrayList<String>();

        try {
            FileReader fr = new FileReader(path);
            BufferedReader br = new BufferedReader(fr);
            list = br.lines().collect(Collectors.toList());
        } catch(Exception e) {}

        return list;
    }

    private static <T> List<List<T>> eachSlice(List<T> list, int size) {
        List<List<T>> result = new ArrayList<List<T>>();
        int l = list.size();

        for (int i = 0; i < l; i += size) {
            result.add(list.subList(i, i + size));
        }

        return result;
    }
}

追記

tokuhiromさんよりコメントもらった結果、ちゃんとJava8ぽくなった!

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

class Sekigae {
    public static void main (String[] args) throws Exception {
        final List<String> names = Files.readAllLines(Paths.get("names.txt"), StandardCharsets.UTF_8);
        Collections.shuffle(names);
        eachSlice(names, 3)
            .stream()
            .map(list -> list.stream().collect(Collectors.joining(" ")))
            .forEach(System.out::println);
    }

    private static <T> List<List<T>> eachSlice(List<T> list, int size) {
        List<List<T>> result = new ArrayList<List<T>>();
        int l = list.size();

        for (int i = 0; i < l; i += size) {
            result.add(list.subList(i, i + size));
        }

        return result;
    }
}