Tôi đã gặp khó khăn với vấn đề này trong vài ngày tới. Tôi đang cố tạo chức năng Pivot bằng cách sử dụng Luồng Java. Tôi chỉ phải triển khai SUM, COUNT, MAX, MIN và AVERAGE. Đối với đầu vào, tôi được cung cấp một chỉ mục cột Pivot, một mảng các chỉ mục hàng pivot và giá trị cần tính.Triển khai bảng Java Pivot bằng cách sử dụng Luồng
Điểm bắt giữ là dữ liệu nằm trong Danh sách < Danh sách < Đối tượng >>, Đối tượng có hoặc là Chuỗi, Số nguyên hoặc Đôi. nhưng tôi sẽ không biết cho đến khi chạy. Và tôi phải trả lại kết quả của mình dưới dạng Danh sách < Danh sách < Đối tượng >>.
Tôi gặp rắc rối với MAX/MIN (tôi giả sử trung bình mà sẽ tương tự như MAX và MIN)
Để trục trên nhiều giá trị bảng, tôi tạo ra một lớp học để sử dụng tôi groupingBy thứ hai của tôi
Điều này sẽ không biên dịch, tôi không chắc nên so sánh gì, ở đâu để chuyển đổi đối tượng sang int hoặc nếu tôi cần. Tôi muốn làm điều này tất cả với một dòng, nhưng tôi không chắc chắn nó có thể. Tôi đang làm gì sai, hoặc tôi có thể làm điều đó khác đi. Cảm ơn trước.
package pivot.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
public class PivotTest {
List<List<Object>> rows = new ArrayList<List<Object>>();
public PivotTest() throws Exception {
rows.add(Arrays.asList(new Object[]{ "East", "Boy", "Tee", 10, 12.00}));
rows.add(Arrays.asList(new Object[]{ "East", "Boy", "Golf", 15, 20.00}));
rows.add(Arrays.asList(new Object[]{ "East", "Girl", "Tee", 8, 14.00}));
rows.add(Arrays.asList(new Object[]{ "East", "Girl", "Golf", 20, 24.00}));
rows.add(Arrays.asList(new Object[]{ "West", "Boy", "Tee", 5, 12.00}));
rows.add(Arrays.asList(new Object[]{ "West", "Boy", "Golf", 12, 20.00}));
rows.add(Arrays.asList(new Object[]{ "West", "Girl", "Tee", 15, 14.00}));
rows.add(Arrays.asList(new Object[]{ "West", "Girl", "Golf", 10, 24.00}));
}
// Dynamic Max based upon Column, Value to sum, and an array of pivot rows
public void MaxTable(int colIdx, int valueIdx, int... rowIdx) {
Map<Object, Map<Object, Integer>> myList = newRows.stream().collect(
Collectors.groupingBy(r -> ((List<Object>) r).get(colIdx),
Collectors.groupingBy(r -> new PivotColumns(r, rowIdx),
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(???)),
r -> ((List<Object>) r).get(valueIdx)))));
System.out.println("Dynamic MAX PIVOT"); System.out.println(myList);
}
public static void main(String[] args) {
try {
PivotTest p = new PivotTest();
System.out.println("\n\nStreams PIVOT with index values inside a List\n");
p.MaxTable(0, 3, new int[] { 2 });
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class PivotColumns {
ArrayList<Object> columns;
public PivotColumns(
List<Object> objs, int... pRows) {
columns = new ArrayList<Object>();
for (int i = 0; i < pRows.length; i++) {
columns.add(objs.get(pRows[i]));
}
}
public void addObject(Object obj) {
columns.add(obj);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((columns == null) ? 0 : columns.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PivotColumns other = (PivotColumns) obj;
if (columns == null) {
if (other.columns != null)
return false;
} else if (!columns.equals(other.columns))
return false;
return true;
}
public String toString() {
String s = "";
for (Object obj : columns) {
s += obj + ",";
}
return s.substring(0, s.lastIndexOf(','));
}
}
Đó là câu hỏi * rất lớn *. Bạn có thể muốn đọc về cách đặt câu hỏi * Tối thiểu *. Xem http://stackoverflow.com/help/mcve --- Tôi đã không nhận được đến nay, nhưng bạn nói rằng bạn có một 'List' của các đối tượng, hoặc là' String', 'Integer', hoặc' Double' và rằng bạn sẽ không biết cho đến khi chạy, nhưng sau đó bạn tiếp tục hiển thị một lớp 'Row' được định nghĩa đầy đủ. Vì vậy, đó là nó, bạn có biết hay không? – Andreas
Bất kỳ lý do cụ thể nào nó * có * là luồng? – Andreas
No. Tôi hoàn toàn cởi mở với các giải pháp khác không liên quan đến luồng. –