Вы можете просто использовать лямбду и улучшить свой существующий код следующим образом:
Comparator<Product> comparator = Comparator.comparing(p -> p.getCommentList().size()); // type 'Product' bound
List<Product> soldL = new LinkedList<>(); // type inferred '<>'
soldL.addAll(sold);
soldL.sort(comparator); // use 'List.sort'
Редактировать : вместо сравнения можно использовать comparingInt
чтобы избежать бокса как:
Comparator<Product> comparator = Comparator.comparingInt(p -> p.getCommentList().size());
Попробуйте std::stringstream
.
#include <string>
#include <sstream>
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
Хорошая обертка вокруг вышеупомянутой техники - Boost's lexical_cast
:
#include <boost/lexical_cast.hpp>
#include <string>
std::string ts = boost::lexical_cast<std::string>(seconds);
И для подобных вопросов, я люблю связывать Строковые форматеры усадебного хозяйства Херба Саттера.
ОБНОВЛЕНИЕ:
В C ++ 11 используйте to_string()
.
Существует множество способов форматирования времени (в зависимости от часового пояса, способа его отображения и т. Д.), Поэтому вы не можете просто неявно преобразовать time_t в строку.
Способ C состоит в том, чтобы использовать ctime или использовать strftime плюс либо местное время или gmtime .
Если вам нужен более похожий на C ++ способ выполнения преобразования, вы можете изучить библиотеку Boost.DateTime .
Вот мой форматер - комментарии приветствуются. Этот вопрос, казалось, больше всего помог мне подать мне сообщение для тех, кто ищет то же самое.
#include <iostream>
#include "Parser.h"
#include <string>
#include <memory>
#include <ctime>
#include <chrono>
#include <iomanip>
#include <thread>
using namespace std;
string to_yyyyMMddHHmmssffffff();
string to_yyyyMMddHHmmssffffff() {
using namespace std::chrono;
high_resolution_clock::time_point pointInTime = high_resolution_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(pointInTime);
microseconds micros = duration_cast<microseconds>(pointInTime.time_since_epoch());
std::size_t fractional_microseconds = micros.count() % 1'000'000;
std:stringstream microstream;
microstream << "00000" << fractional_microseconds;
string formatted = microstream.str();
int index = formatted.length() - 6;
formatted = formatted.substr(index);
std::stringstream dateStream;
dateStream << std::put_time(std::localtime(&now_c), "%F %T") << "." << formatted;
formatted = dateStream.str();
return formatted;
}
В C ++ можно использовать строковый поток.
Способ C - использовать snprintf () для форматирования числа:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
Попробуйте это, если хотите, чтобы время отображалось в читаемой строке:
#include <ctime>
std::time_t now = std::time(NULL);
std::tm * ptm = std::localtime(&now);
char buffer[32];
// Format: Mo, 15.06.2009 20:20:00
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm);
Дополнительную информацию о strftime () можно найти на cppreference.com
Стандартный C ++ не имеет собственных функций времени / даты - вам нужно использовать C localtime и связанные функции.
функция «ctime ()» преобразует время в строку. Если вы хотите контролировать способ печати, используйте "strftime". Однако strftime () принимает аргумент "struct tm". Используйте "localtime ()" для преобразования 32-битного целого числа time_t в структуру tm.