转换列表<list <string>&gt;使用Guava函数</integer> </list <string>进入List <integer>

时间:2013-10-04 02:57:25

标签: java guava

如何使用Guava的函数将一个列表列表值(List<List<String>>)转换为一个整数列表(List<Integer>)?

List<String> list1 = ImmutableList.of("1", "2");
List<String> list2 = ImmutableList.of("3", "4");
List<String> list3 = ImmutableList.of("5", "6");
List<List<String>> lists = ImmutableList.of(list1, list2, list3);

这是我要做的,而不是使用foreach:

`List<Integer> ints = new ArrayList<Integer>();
  for (List<String> list : lists) {
   for (String string : list) {
    Integer integer = Integer.valueOf(string);
    ints.add(integer);
    }
 }`

2 个答案:

答案 0 :(得分:3)

public final class StringToIntegerAdapter implements Function<String, Integer> {

    public static final StringToIntegerAdapter INSTANCE = new StringToIntegerAdapter();

    /** Private constructor forces everyone to use the singleton. */
    private StringToIntegerAdapter() {
    }

    @Override
    @Nullable
    public Integer apply(@Nullable final String str) {
        if (str == null) {
            return null;
        } else {
            return Integer.valueOf(str);
        }
    }
}

完成后,您可以将String列表转换为一行中的整数列表:

List<String> stringList = getMyStrings();
List<Integer> intList = Lists.transform(stringList, StringToIntegerAdapter.INSTANCE);

答案 1 :(得分:1)

使用@ Jim的StringToIntegerAdapter,您可以使用Guava中的以下方法紧凑地执行所需的转换:

List<List<String>> strings = getString();
List<Integer> intList = Lists.newArrayList(Iterables.transform(
    Iterables.concat(strings), StringToIntegerAdapter.INSTANCE);