- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang gặp khó khăn trong việc duy trì cấu trúc dữ liệu mà tôi muốn trong các hoạt động phát trực tuyến bằng Java, rất có thể là do thiếu hiểu biết và thực hành đúng đắn.
lớp công khai Chính {
public static void main(String[] args) {
List list = Arrays.asList(1, 1, 1, 2, 3, 3, 3, 3);
//Nhóm theo
Bản đồ countGrouped = list.stream().collect(
Collectors.groupingBy(
x -> x, Collectors.counting()));
System.out.println("group by value, count " + countGrouped);
//Sắp xếp desc
Bản đồ giảm dầnSorted = new LinkedHashMap<>();
countGrouped.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.forEachOrdered(x ->desendingSorted.put(x.getKey(), x.getValue()));
System.out.println("sắp xếp " + giảm dầnSắp xếp);
//lọc
Bản đồ được lọc = LinkedHashMap mới<>();
giảm dầnSorted.entrySet().stream()
.filter(x -> x.getValue() >= 2)
.forEach(x -> filter.put(x.getKey(), x.getValue()));;
System.out.println("đã lọc " + đã lọc);
// Tách nhóm
Bản đồ<>>> nhóm = filter.entrySet().stream()
.collect(Collectors.groupingBy(x -> x.getValue()));
System.out.println("được nhóm " + nhóm);
}
}
dẫn đến
nhóm theo giá trị, đếm {1=3, 2=1, 3=4}
đã sắp xếp {3=4, 1=3, 2=1}
đã lọc {3=4, 1=3}
được nhóm {3=[1=3], 4=[3=4]}
Điều đó đúng, nhưng tôi đang dần đi sâu vào các cấu trúc dữ liệu bí truyền hơn không có ý nghĩa cụ thể, như bạn có thể thấy, với (wtf?) Bản đồ<đối tượng,="" danh="">đối>
Kết thúc là như bạn có thể thấy. Mặc dù nó có thể chỉ là một >>Bản đồ
.
Vì vậy, câu hỏi cụ thể là làm cách nào để chuyển đổi và chứa đầu ra cấu trúc dữ liệu do các hoạt động truyền phát tạo ra?
Tôi đã thấy rằng Người sưu tập cung cấp các hoạt động chuyển đổi cho Map(...) và tôi đoán đó là cách tốt nhất, nhưng tôi không thể (tôi nghĩ do thiếu kiến thức phù hợp) làm cho nó hoạt động.
Trong trường hợp này, đối với tôi, có vẻ như việc dạy giải thích, liên kết đến các tài nguyên toàn diện để hiểu rõ hơn về quy trình và lập trình hàm hoặc thứ gì đó tương tự, sẽ tốt hơn các giải pháp thực tế cho các tình huống cụ thể (điều này sẽ rất tốt cho việc tập thể dục, nhưng Bạn hiểu rồi)
câu trả lời hay nhất
Hơi ngạc nhiên khi bạn gặp rắc rối ở đây vì bạn đã thể hiện kiến thức về tất cả những điều cần thiết. Bạn biết nhómTheo
có thể sử dụng cái khác Người sưu tầm
, bạn đã đặt tên đúng bản đồ
, và bạn đã sử dụng chức năng để trích xuất >Bản đồ.Entry
Giá trị đã tồn tại.
Kết hợp những điều này mang lại cho bạn
Bản đồ> nhóm = filter.entrySet().stream()
.collect(Collectors.groupingBy(x -> x.getValue(),
Collectors.toMap(x -> x.getKey(), x -> x.getValue())));
System.out.println("được nhóm " + nhóm);
Để thể hiện rõ hơn thao tác, tôi đã thay đổi đầu vào thành
List list = Arrays.asList(1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 4);
结果
được nhóm {3=[1=3, 4=3], 4=[3=4]}
Tuy nhiên, sẽ không có ý nghĩa gì nếu lặp lại số đếm luôn giống với khóa bản đồ bên ngoài. Vì vậy, một lựa chọn khác là
Bản đồ> nhóm = filter.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
System.out.println("được nhóm " + nhóm);
dẫn đến
được nhóm {3=[1, 4], 4=[3]}
Lưu ý bạn không nên sử dụngforEach
/forEachOrdered
Sẽđưa vào
vào bản đồ. Bước trung gian của bạn phải là
//Sắp xếp desc
Map giảm dầnSắp xếp = countGrouped.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(a,b) -> { ném AssertionError mới(); }, LinkedHashMap::new));
System.out.println("sắp xếp " + giảm dầnSắp xếp);
//lọc
Map đã lọc = giảm dầnSorted.entrySet().stream()
.filter(x -> x.getValue() >= 2)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(a,b) -> { ném AssertionError mới(); }, LinkedHashMap::new));
System.out.println("đã lọc " + đã lọc);
Chấp nhận nhà máy bản đồ bản đồ
Bộ sưu tập buộc chúng tôi phải cung cấp một hàm hợp nhất, nhưng vì đầu vào của chúng tôi đã là một bản đồ phải có các khóa khác nhau, nên tôi cung cấp một hàm ở đây luôn gửi, bởi vì sẽ có điều gì đó cực kỳ sai sót nếu có các bản sao.
Nhưng xin lưu ý rằng việc buộc tất cả các hoạt động này được thu thập vào một bản đồ mới là phức tạp và không hiệu quả một cách không cần thiết. Cũng không cần phải sắp xếp toàn bộ dữ liệu trước rồi mới chuyển lọc
Giảm lượng dữ liệu. Việc lọc trước có thể làm giảm công sức của bước sắp xếp và kết quả của thao tác lọc sẽ không phụ thuộc vào thứ tự.
Sẽ tốt hơn nhiều nếu thực hiện toàn bộ hoạt động trong một đường dẫn duy nhất
List list = Arrays.asList(1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 4);
Map countGrouped = list.stream().collect(
Collectors.groupingBy(x -> x, Collectors.counting()));
System.out.println("group by value, count " + countGrouped);
Bản đồ> nhóm = countGrouped.entrySet().stream()
.filter(x -> x.getValue() >= 2)
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.groupingBy(Map.Entry::getValue, LinkedHashMap::new,
Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
System.out.println("được nhóm " + nhóm);
Lưu ý rằng không giống như đoạn mã trước, thao tác nhóm cuối cùng bây giờ cũng giữ nguyên thứ tự, dẫn đến
được nhóm {4=[3], 3=[1, 4]}
Tức là các nhóm được sắp xếp theo thứ tự giảm dần về số lượng.
Vì số lượng là chìa khóa cho bản đồ kết quả nên chúng ta cũng có thể sử dụng bản đồ được sắp xếp nội tại làm loại kết quả và bỏ qua bước sắp xếp:
Bản đồ> nhóm = countGrouped.entrySet().stream()
.filter(x -> x.getValue() >= 2)
.collect(Collectors.groupingBy(Map.Entry::getValue,
() -> TreeMap mới<>(Comparator.reverseOrder()),
Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
Sự khác biệt chính là hoạt động truyền phátsau đóHành vi của bản đồ kết quả, ví dụ: nếu bạn chèn thêm phần tử vào đó, bởi vì Bản đồ cây
Các khóa mới sẽ được chèn theo thứ tự giảm dần, trong khi Bản đồ LinkedHash
sẽ nối chúng vào cuối, duy trì thứ tự chèn.
Về java - Map
Thật khó để nói những gì đang được hỏi ở đây. Câu hỏi mơ hồ, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Chúng ta có thể nói rằng O(K + (NK)logK) tương đương với O(K + N logK) với 1 < = K <= N không? Câu trả lời hay nhất Câu trả lời ngắn gọn là chúng không tương đương, nó phụ thuộc vào giá trị của k. Nếu k bằng N thì độ phức tạp đầu tiên là O(
Tôi có giải pháp sau, nhưng tôi nghe từ những người bình luận khác rằng đó là O(N * K * K), không phải O(N * K) trong đó N là độ dài (tối đa) của danh sách K và K là số lượng danh sách . Ví dụ: cho các danh sách [1, 2, 3] và [4,
Tôi đang cố gắng hiểu sự khác biệt về ngữ nghĩa giữa các cấu trúc ngữ pháp này. câu trả lời hay nhất cho biểu thức cụ thể của bạn ((i
Đôi khi tôi sử dụng mảng 1D: A = np.array([1, 2, 3, 4]) hoặc mảng 2D (sử dụng scipy.io.wavfile để đọc tín hiệu đơn âm hoặc âm thanh nổi): A = np.array( [ [1, 2
Trong quá trình phân cụm tài liệu, như một bước tiền xử lý dữ liệu, trước tiên tôi áp dụng phân tách vectơ số ít để nhận được U, S và Vt. Sau đó, bằng cách chọn một số giá trị riêng thích hợp, tôi đã cắt bớt Vt, điều này giúp tôi hiểu rõ hơn về những gì tôi đọc được. Tài liệu hay - tài liệu liên quan ở đây Hiện tại tôi đang làm việc.
Tôi đang hỏi về thuật toán Top K. Tôi nghĩ O(n + k log n) sẽ nhanh hơn vì... ví dụ: nếu bạn cố chèn k = 300 và n = 100000000 chúng ta có thể thấy O(n + k log
Câu hỏi này liên quan chặt chẽ đến một câu hỏi khác R:sample(). . Tôi muốn tìm cách trong R để liệt kê tất cả các hoán vị của k số có tổng bằng k, trong đó mỗi số được chọn từ 0: k. Nếu k=7 thì có thể chọn từ 0,1,...,7
Tôi hiện đang đánh giá hệ thống gợi ý dựa trên phản hồi ngầm. Tôi hơi bối rối về các số liệu đánh giá cho các nhiệm vụ xếp hạng. Cụ thể, tôi muốn đánh giá bằng độ chính xác và thu hồi. Precision@k có ưu điểm là không yêu cầu
Tôi đang làm việc bằng Python và cần tìm một thuật toán để tạo ra tất cả các mảng k, k,..., k n chiều có thể có, mỗi mảng có một hàng 1 dọc theo trục. Vì vậy, hàm chấp nhận hai số - n và k và sẽ trả về một danh sách mảng chứa dọc theo
Chúng ta có N cặp. Mỗi cặp có hai số. Ta phải tìm số K lớn nhất sao cho nếu lấy J từ N cặp đã cho (1 2), nếu chọn ba cặp (1,2) thì ta chỉ có hai số khác nhau là 1 và 2. Bắt đầu bằng một Kiểm tra mọi khả năng
Tôi không hoàn toàn chắc chắn về giải pháp hiện tại của mình khi gặp vấn đề sau: Câu hỏi: Cho một đống tối đa n phần tử, được lưu trữ trong một mảng A, liệu có thể in tất cả các phần tử max-K trong O(K* log(K) ) ở giữa? Câu trả lời của tôi: Có, có,
Tôi hiểu: val vector: RDD[(String, Array[String])] = [("a", {v1,v2,..}),("b", {u1,u2,..})] Want để chuyển đổi thành: RDD[(St
Tôi có X số dương với chỉ số x_i. Mỗi x_i cần thuộc một trong K nhóm (trong đó K được xác định trước). Gọi S_j là tổng của tất cả x_i trong K_j. Tôi cần phân phối tất cả x_i sao cho phương sai của tất cả S_j được giảm thiểu.
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
Tôi đang nghiên cứu một thuật toán tìm số nguyên thủy và nhìn thấy câu lệnh sau, tôi không hiểu tại sao. while (k*k <= n) có tốt hơn while (k <= Math.sqrt(n)) vì lệnh gọi hàm không? Chức năng gọi sử dụng nhiều tài nguyên hơn. Thậm chí
Tôi muốn tìm cách nhanh nhất có thể để nhân hai ma trận bool nhỏ, trong đó nhỏ có nghĩa là 8x8, 9x9... 16x16. Quy trình này sẽ được sử dụng nhiều và do đó cần phải rất hiệu quả, vì vậy vui lòng không gợi ý rằng giải pháp đơn giản phải đủ nhanh. vì
Có cách nào thành ngữ để có được Bộ và Hàm cũng như có được chế độ xem trực tiếp trên Bản đồ không? (tức là Bản đồ được hỗ trợ bởi sự kết hợp giữa Bộ và Hàm, ví dụ: nếu một phần tử được thêm vào Bộ, thì mục tương ứng cũng có trong M
Câu hỏi này đã có câu trả lời ở đây: Bộ nhớ của biến cục bộ có thể được truy cập ngoài phạm vi của nó không? (20 câu trả lời) trả về địa chỉ
Cho một ma trận:- k = [1 2 3; 4 5 6; 7 8 NaN]; Nếu tôi muốn thay thế một số bằng 0, chẳng hạn như 2, tôi có thể sử dụng: k(k==2) =
Tôi là một lập trình viên xuất sắc, rất giỏi!