Java 8:如何使用lambda将列表转换为列表
发布时间:2020-12-14 06:03:18 所属栏目:Java 来源:网络整理
导读:我正在尝试将列表拆分为列表,其中每个列表的最大大小为4. 我想知道如何使用lambdas做到这一点. 目前我正在这样做的方式如下: ListListObject listOfList = new ArrayList();final int MAX_ROW_LENGTH = 4;int startIndex =0;while(startIndex = listToSplit
我正在尝试将列表拆分为列表,其中每个列表的最大大小为4.
我想知道如何使用lambdas做到这一点. 目前我正在这样做的方式如下: List<List<Object>> listOfList = new ArrayList<>(); final int MAX_ROW_LENGTH = 4; int startIndex =0; while(startIndex <= listToSplit.size() ) { int endIndex = ( ( startIndex+MAX_ROW_LENGTH ) < listToSplit.size() ) ? startIndex+MAX_ROW_LENGTH : listToSplit.size(); listOfList.add(new ArrayList<>(listToSplit.subList(startIndex,endIndex))); startIndex = startIndex+MAX_ROW_LENGTH; } UPDATE 似乎没有一种简单的方法可以使用lambdas来拆分列表.虽然所有的答案都非常受欢迎,但它们也是lambdas不简化事物的一个很好的例子. 解决方法
试试这种方法:
static <T> List<List<T>> listSplitter(List<T> incoming,int size) { // add validation if needed return incoming.stream() .collect(Collector.of( ArrayList::new,(accumulator,item) -> { if(accumulator.isEmpty()) { accumulator.add(new ArrayList<>(singletonList(item))); } else { List<T> last = accumulator.get(accumulator.size() - 1); if(last.size() == size) { accumulator.add(new ArrayList<>(singletonList(item))); } else { last.add(item); } } },(li1,li2) -> { li1.addAll(li2); return li1; } )); } System.out.println( listSplitter( Arrays.asList(0,1,2,3,4,5,6,7,8,9),4 ) ); 另请注意,此代码可以进行优化,而不是: new ArrayList<>(Collections.singletonList(item)) 使用这一个: List<List<T>> newList = new ArrayList<>(size); newList.add(item); return newList; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |