如何从映射到多个结果的流中收集?

时间:2018-01-24 20:28:37

标签: java java-8 java-stream

我想通过调用expand()来映射列表中的每个条目, List<String> myList = new ArrayList<>(); List<String> expanded = new ArrayList<>(); for (String s : myList) { expanded.addAll(expand(s)); } return expanded; private List<String> expand(String x) { return Arrays.asList(x, x, x); } 返回多个条目,然后将结果作为列表收集。

没有溪流,我会这样做:

return myList.stream().map(this::expand).collect(Collectors.toList());

如何用流完成此操作?这给出了编译错误:

namespace WindowsFormsApp1 { public partial class Form1 : Form { int Count = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Count++; label1.Text = Count.ToString(); } } }

3 个答案:

答案 0 :(得分:4)

flatMap可以帮助您:

ValidationTask

答案 1 :(得分:4)

return myList.stream().map(this::expand).collect(Collectors.toList());

返回List<List<String>>,因为当myList.stream().map(this::expand)传递给Stream<List<String>>变量而不是map()变量的变量时,List<String>会返回键入为String的流

你不想要那个。

Stream.map()Stream.flatMap()Stream<List<String>>合并为Stream<String>return myList.stream() .map(this::expand) .flatMap(x->x.stream()) .collect(Collectors.toList());

function startCounter(){
$('.counter').each(function (index) {
    $(this).prop('Counter',0).animate({
        Counter: $(this).text()
    }, {
        duration: 2000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
    });
});
   }    
   startCounter();

答案 2 :(得分:3)

使用Stream<List<String>Stream<String>转换为return myList.stream().map(this::expand).flatMap(Collection::stream).collect(Collectors.toList());: {{1}}